MySql的事务是什么?什么是脏读、幻读、不可重复读?


一、事务是什么?

        事务指的是一组SQL语句的操作,是一个整体,要么全部成功,一旦这一事务中的SQL语句中有错误出现,则全部失败,在本文中提到的都是源于Mysql中INNODB学习后的总结,在MySql中,MYISAM是不支持事务

关闭MySQL自动提交                                    SET AUTOCOMMIT = 0;
开启一个事务,标记事务的起始点                START TRANSACTION;
向数据库提交事务                                         COMMIT;
将事务回滚,所有的数据库操作被取消         ROLLBACK;
开启MySQL自动提交                                    SET AUTOCOMMIT = 1;

二、事务的ACID的特性

        事务为了保证自己的完整性,保证数据的准确性,将有错误的事务进行回滚,事务有这样的四个比较鲜明的特性。分别是即原子性、一致性、隔离性、持久性。

 原子性(Atomicity)

       2.1. 一个事务中的多组操作,要么全部成功,要么全部失败。在事务提交(commit)成功之后,所有的操作都生效,提交失败,所有的操作都会回滚。

一致性(Consistency)

        2.2. 一个事务执行之前和执行之后数据库都必须处于一致性状态。在事务执行的过程中,只要事务未提交,就不会改变数据库的状态。提交之后事务已完成,此时数据库状态发生变化。

 隔离性(Isolation)

        2.3. 事务在执行过程中,是与外界完全隔离的,即使数据库发生了变更,事务中也获取不到。A 事务对数据库做的变更,在事务未提交之间,数据库中也看不到,B 事务中也看不到。

持久性(Durability)

       2.4.也称为永久性。  事务一旦提交,对数据库的变更就会持久化到磁盘,即使数据库发生异常重启,数据也不会丢失。

三、隔离级别

        SQL标准定义了4类隔离级别,包括了一些具体规则,用来限定事务内外的哪些改变是可见的,哪些是不可见的。低级别的隔离级一般支持更高的并发处理,并拥有更低的系统开销。

3.1 Read Uncommitted(读取未提交内容)

        在该隔离级别,所有事务都可以看到还没有被提交的事务,获取本来此时不会获取的信息,这种隔离级别一般不会被应用在实际应用中,它的性能也不比其他的隔离级别好,它也被称为脏读。

3.2 Read Committed(读取提交内容 也叫做不可重复读

        这种隔离级别被大多数数据库默认使用(但并不是MySql默认),在此隔离级别下,事务只能看见已经被提交的数据,当读取一个事务两次,读取到的结果不相同,说明这个事务在两次读取期间被进行修改了

3.3Repeatable Read(可重读)

        这是MySQL默认的隔离级别,因为它确保同一事务的多个实例在并发读取数据时,会看到同样的数据行。这就在理论上会产生幻读,(当读取一个范围的数据时,又有事务在该范围进行添加操作,会导致用户看到的值出现幻影超出预期,不过这种情况,在InnoDB和Falcon存储引擎通过多版本并发控制(MVCC,Multiversion Concurrency Control)机制解决了该问题。

3.4Serializable(可串行化)

        这是最高的隔离级别,它通过强制事务排序,使之不可能相互冲突,从而解决幻读问题。简言之,它是在每个读的数据行上加上共享锁。在这个级别,可能导致大量的超时现象和锁竞争。

3.5隔离级别特点总结

  • 7
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值