`

数据库事务的学习笔记

 
阅读更多

对事务本身的理解

1.事务是一组原子性的SQL查询,对于事务内的查询要么完全成功,要么完全失败。

2.mysql默认的事务是自动提交的,即autocommit=true,也就是说一个SQL查询即是一个事务。

3.对于多条语句,通过start transaction;和commit(rollback)进行配合,将多条语句包装为一个更大的事务单元。

4.如果设置autocommit=false,那么语句将不会被提交,直到使用rollback,或者commit。

5.事务的特性ACID(原子性,一致性,隔离性,持久性)

   原子性:要求一个事务不可分割,里面的语句要么全部成功,要么全部失败,不会看到中间状态。

   一致性:个人感觉是数据库数据本身和数据之间的约束关系在事务前后是不会变的。

   隔离性:即一个事务在提交之前,他对记录的修改对其他事务不可见。为了防止过多的锁,MYSQL通过MVCC实现。

   持久性:即事务对记录的修改,在提交时候会被永久的保存到磁盘上。MYSQL为了提高事务效率,存储引擎在修改数据时通常只修改内存数据,同时将修改操作记录到“事务日志”中,再异步的刷回磁盘。

 

对事务隔离级别的理解

Read Uncommited 

未提交读,数据库级别的最低层次,事务会读到其他事务未提交的数据。这种事务级别只保证磁盘不出问题。产生的问题即脏读。

如图:



 

 左侧事务中对age=4的记录进行了更新但是未提交,右侧事务使用uncommited read 读到了未提交的记录,使用其他事务级别则读到原值。

 

Read Committed

与read uncommitted不同,这个级别下的事务读不到其他事务未提交的记录.。这个在上一张图中就有体现。虽然Read Committed能够保证事务读到别人提交的记录,但是仍然存在在同一个事务中,对同一条记录读两次,值发生变化的情况。即两次select中有其他事务对该记录有更新。这种不一致的情况,成为“不可重复读”

如图:

 

 

在read committed下右边session启动一个事务,第一次查询age=4的记录值为xiaotong,然后左边对age=4的记录更新为myname,右边事务再查询时,发现记录已经变名字了。这就是在一个事务中对一条记录反复读取出现不一致情况,称之为“不可重复读”

 

Repeatable Read(mysql默认级别)

可重复读。针对read committed出现的情况,repeatable read 就是一种在事务内对统一记录反复查询不会出现不一致的事务级别,

如图:



 

 如果设置右边事务级别为repeatable read,那么无论在事务过程中,其他事务如何更改记录值,右边事务对统一记录的查询结果始终一致。

 

Serializable(序列)

隔离级别最高的一种事务级别,要求不同事务之间串行执行,这样能够保证事务之间没有任何干扰,但是这样查询的效率很低,吞吐量低,需谨慎使用。序列的级别下,是不会存在幻读的,即在一个事务中,对一批事务进行更新,而在令一个事务中插入了一条新记录满足条件。这样更新事务就会发现更新操作在提交之后仍有满足条件而未更新的,称之为“幻读”。

 

事务相关常用sql

查询当前session的事务隔离级别

select @@tx_isolation

 

查看全局事务隔离级别

select @@global.tx_isolation

 

这是session的事务级别

set session(global)  transaction isolation level read uncommitted

(read committed,repeatable read,serializable)

 

 
 

 

 

  • 大小: 40.7 KB
  • 大小: 23.6 KB
  • 大小: 22 KB
  • 大小: 32.6 KB
分享到:
评论
1 楼 haithink 2014-09-27  
不错,有图有真相!

相关推荐

    PCTP个人学习笔记—TiDB数据库事务设计

    PCTP个人学习笔记—TiDB数据库事务设计

    linux运维学习笔记:MySQL数据库事务和引擎知识.pdf

    linux运维学习笔记:MySQL数据库事务和引擎知识

    JavaEE5学习笔记01-JTA和数据库事务

    JavaEE5学习笔记01-JTA和数据库事务.

    Oracle数据库学习笔记

    向你介绍我的Oracle数据库学习笔记 1.SQL命令: SQL 支持4大类型命令: 数据定义语言(DDL): Create(创建), Alter(更改), Drop(删除). 数据操纵语言(DML): Select(选择), Insert(插入), ...

    SQLServer2005数据库学习笔记

    笔记是本人学习SQLServer一段时间后重新整理出来的,适合有一些入门基础的人学习。 ├─01 安装及使用 │ SQLServer2005安装及使用.txt │ ├─02 常用函数 │ function.sql │ ├─03 建表、建库 │ create.sql ...

    sql数据库学习全过程笔记

    6.12 Sql(基础) 1 ...7.4 sql(事务处理、游标) 17 7.5存储过程 21 7.6触发器 25 7.9存储过程、游标、触发器 27 7.11 函数 32 7.12数据库管理备份与恢复,数据导入与导出 35 7.13数据库的权限设置 35

    Oracle学习笔记(事务知识点)

    Oracle学习笔记(事务知识点),事务处理:所谓的事务处理其实就是保证数据操作的完整性,所有的操作要么同时成功,要么同时失败

    MySQL数据库入门到高级笔记快速学习pdf版本

    高级部分的内容包含了视图的使用,存储过程的创建使用,索引,触发器,事务的使用,安全管理,数据库的备份与还原,最后对于提高性能简单总结 能学到什么:1. mysql的启动和关闭,使用数据库,对库的基本操作以及...

    MySQL学习笔记4-数据库管理和备份恢复.md

    通过学习可以全面掌握数据库的用户管理、事务管理、备份恢复等管理方法,并能利用程序自动化实现定期备份、性能检测等维护工作。 使用建议: 重点学习备份恢复和定期维护两部分的具体技术方案,针对提供的代码示例进行...

    Redis学习笔记.pdf

    简单来说 redis 就是一个数据库,不过与传统数据库不同的是 redis 的数据是存在内存中的,所以存写速度非常快,因 此 redis 被广泛应用于缓存方向。另外,redis 也经常用来做分布式锁。redis 提供了多种数据类型来...

    Redis学习笔记.rar

    四、 redis学习笔记之事务 16 五、 redis学习笔记之pipeline 20 六、 redis学习笔记之发布订阅 23 七、 redis学习笔记之持久化 28 八、 redis学习笔记之主从复制 30 九、 redis学习笔记之虚拟内存 31

    Java/JavaEE 学习笔记

    Java/JavaEE 学习笔记 作者在杰普学习时的学习笔记,是J2ee初学者必备手册,是大家学习J2EE开发的很好的参考笔记。 Java/JavaEE 学习笔记 内容目录: Unix 学习笔记..........7 一、Unix前言............7 二、...

    MySQL5.7学习笔记 完整版PDF

    《MySQL5.7学习笔记》将从MySQL5.7的安装、配置、使用等方面进行详细介绍,帮助读者快速掌握MySQL5.7的使用技巧。首先,我们将介绍MySQL5.7的安装方法,包括Windows和Linux平台的安装步骤。然后,我们将讲解MySQL5.7...

    UJOB项目-MySQL讲解及创建数据库表

    01A MySQL讲解及创建数据库表.wmv 01B MySQL讲解及创建数据库表.wmv 02A 创建项目并实现JDBC访问数据库.wmv 02B 创建项目并实现JDBC访问数据库.wmv 02C 创建项目并实现JDBC访问数据库...学习笔记 - UJOB项目.doc 源代码

    oracle 学习笔记

    Oracle 数据库、 SQL,从基本入门开始,逐步掌握学习Oracle数据库操作的主要功能

    Mysql学习笔记.pdf

    Mysql学习笔记 1. MYSQL 体系架构、特性、基本概念 2. 基本数据类型 3. 数据对象: 表、 索引、 视图 4. 基本 SQL 语法、 Mysql 语法 5. 常用函数 6. 事务、 锁相关 7. 性能优化

    MySQL零基础小白学习及面试学习笔记.rar

    MySQL零基础小白学习及面试学习笔记是个人在学习过程中整理和梳理的笔记。 其中包含邮件备份demo案例。 基础知识点笔记涵盖:安装、基础原理、存储引擎、索引事务锁、触发器等等面试相关使用到的知识点 实战专栏包含...

    J2EE学习笔记(J2ee初学者必备手册)

    Unix 学习笔记7 一、Unix前言............7 二、Unix基础知识....7 三、Unix常用命令....8 四、 文件系统权限.21 五、软硬连接的区别..........................22 六、范例程序...........22 七、网络基本命令...26...

    net学习笔记及其他代码应用

    28.SQLSERVER服务器中,给定表 table1 中有两个字段 ID、LastUpdateDate,ID表示更新的事务号, LastUpdateDate表示更新时的服务器时间,请使用一句SQL语句获得最后更新的事务号 答:Select ID FROM table1 Where ...

Global site tag (gtag.js) - Google Analytics