Mysql事务及隔离级别

这篇文,书生来说一下Mysql的事务以及隔离级别

MySQL 和其它的数据库有一个很大的不同就是事务由存储引擎所决定,

例:MYISAM,MEMORY,ARCHIVE 都不支持事务,

事务就是为了解决一组查询要么全部执行成功,要么全部执行失败。

MySQL 事务默认是采取自动提交的模式,除非显示开始一个事务。

Show variables like Autocommit;(查看是否开启自动提交)

修改自动提交模式:OFF=0,ON=1

注:修改自动提交对非事务类型的表是无效的,因为它们本身就没有提交和回滚的概念,

还有一些命令是会强制自动提交的,比如 DLL 命令、lock tables 等。

Set Autocommit=off;(关闭自动事务)

Set Autocommit=0;(事务非自动提交)

接下来说事务的四大特征原子性,隔离性,一致性,持久性

原子性(Atomicity):整个事务中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。

一致性(Correspondence):在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏。

隔离性(Isolation):隔离状态执行事务,使它们好像是系统在给定时间内执行的唯一操作。如果有两个事务,运行在相同的时间内,执行 相同的功能,事务的隔离性将确保每一事务在系统中认为只有该事务在使用系统。这种属性有时称为串行化,为了防止事务操作间的混淆,必须串行化或序列化请 求,使得在同一时间仅有一个请求用于同一数据。

持久性(Durability):在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。

再来说说Mysql的四种隔离级别:读未提交,读已提交,可重复读,串行化

隔离级别

脏读

不可重复读

幻读

读未提交(READUNCOMMITTED)

读已提交(READ COMMITTED)

x

可重复读(REPEATABLE READ)

x

x

串行化(SERIALIZABLE)

x

x

x

(1) 脏读

脏读是指一个事务正在访问数据,并且对数据进行了修改,但是这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。

(2) 不可重复读

不可重复读是指在一个事务内,多次读取同一个数据。
在这个事务还没有结束时,另外一个事务也访问了该同一数据。那么,在第一个事务中的两次读数据之间,由于第二个事务的修改,那么第一个事务两次读到的的数据可能是不一样的。这样在一个事务内两次读到的数据是不一样的,因此称为是不可重复读。

(3) 幻读

幻读是指当事务不是独立执行时发生的一种现象,例如第一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。同时,第二个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。那么,以后就会发生操作第一个事务的用户发现表中还有没有修改的数据行,就好象幻觉。

读未提交(READUNCOMMITTED):未提交读隔离级别也叫读脏,就是事务可以读取其它事务未提交的数据。

读已提交(READ COMMITTED):在其它数据库系统比如 SQL Server 默认的隔离

级别就是提交读,已提交读隔离级别就是在事务未提交之前所做的修改其它事务是不可见

的。

可重复读(REPEATABLE READ):保证同一个事务中的多次相同的查询的结果是一致的,比如一个事务一开始查询了一条记录然后过了几秒钟又执行了相同的查询,保证两次查询的结果是相同的,可重复读也是 mysql 的默认隔离级别。

串行化(SERIALIZABLE):可串行化就是保证读取的范围内没有新的数据插入,比如事务第一次查询得到某个范围的数据,第二次查询也同样得到了相同范围的数据,中间没有新的数据插入到该范围中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值