mysql事务隔离级别

发布时间:2020-11-20 发布网站:编程之家
编程之家收集整理的这篇文章主要介绍了mysql事务隔离级别编程之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

Transaction Isolation Levels

InnoDB支持SQL1992标准中的四种隔离级别:READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ、SERIALIZABLE。默认的隔离级别是REPEATABLE READ。

通过SET TRANSACTION命令可以改变默认的隔离级别,为了让这种改变对所有用户的所有连接都生效,需要加上--transaction-isolation选项。

InnoDB通过不同的加锁策略来实现不同的隔离级别

REPEATABLE READ

这是InnoDB默认的隔离级别。在一个事务中,一致读会读到该事务中第一次读到的那个快照。这就意味着,在同一个事务中多次执行普通的SELECT语句返回的结果是一致的。

对于加锁读(SELECT ... FOR UPDATE或者SELECT ... LOCK IN SHARE MODE)、更新、删除语句,锁取决于语句是否使用了唯一索引或者范围类的检索条件。

  • 对于用唯一索引作为检索条件,InnoDB只会锁发现的索引记录,而不会锁它前面的间隙
  • 对于其它的检索条件,InnoDB锁定扫描的索引范围,用间隙锁或者next-key锁来阻塞其它会话向这个范围内的间隙中插入数据

 

 

参考 https://dev.mysql.com/doc/refman/5.7/en/innodb-transaction-isolation-levels.html

 


 事务的特性

  • 原子性:事务中的操作要么全部成功,要么全部失败
  • 一致性:事务操作必须是将数据库从一个一致性状态带到另一个一致性状态。所谓一致指的是,比如转账,A和B都有100元,转账之前总共是200元,转账之后必须也是200元
  • 隔离性:事务之间不会相互影响
  • 持久性:事务提交以后对数据库所做的改变将永久保存下来

事务并发带来的问题

  • 脏读:一个事务读到另一个事务未提交的数据
  • 幻读:一个事务读到另一个事务已提交的数据,然而这种提交的数据涉及到整个表,比如插入和删除,看起来好像幻觉一样
  • 不可重复读:一个事务中多次读取同一个数据返回的结果不一样

事务隔离级别

  • 读未提交:允许一个事务看到另一个事务没有提交的数据
  • 读已提交:允许一个事务看到另一个事务已提交的数据
  • 可重复读:同一个事务中多次读取看到的数据始终一致
  • 串行化:并发事务串行执行

 

总结

以上是编程之家为你收集整理的mysql事务隔离级别全部内容,希望文章能够帮你解决mysql事务隔离级别所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您喜欢交流学习经验,点击链接加入编程之家官方QQ群:1065694478
编程之家官方公众号

微信公众号搜索 “ 程序精选 ” ,选择关注!

微信公众号搜索 “ 程序精选 ”
精选程序员所需精品干货内容!