MySql事务隔离级别

Posted shixing

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySql事务隔离级别相关的知识,希望对你有一定的参考价值。

mysql的事务隔离级别是读未提交,读已提交,可重复读,串行化四个!默认是可重复读。

事务隔离级别 脏读 不可重复度 幻读
读未提交(read-uncommitted)
不可重复度(read-committed)
可重复度(repeatable-read)
串行化(serializable)

事务的并发问题

  1. 脏读:事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据是脏数据不可重复读:事务 A 多次读取同一数据,事务 B 在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果不一致。

  2. 不可重复读:事务 A 多次读取同一数据,事务 B 在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果不一致。

  3. 幻读:在一次事务里面,多次查询之后,结果集的个数不一致的情况叫做幻读。而多出来或者少的哪一行被叫做幻行。

    小结:不可重复读的和幻读很容易混淆,不可重复读侧重于修改,幻读侧重于新增或删除。解决不可重复读的问题只需锁住满足条件的行,解决幻读需要锁表

补充说明

  1. 事务隔离级别为读提交时,写数据只会锁住相应的行。

  2. 事务隔离级别为可重复读时,如果检索条件有索引(包括主键索引)的时候,默认加锁方式是next-key 锁;如果检索条件没有索引,更新数据时会锁住整张表。一个间隙被事务加了锁,其他事务是不能在这个间隙插入记录的,这样可以防止幻读。

  3. 事务隔离级别为串行化时,读写数据都会锁住整张表。

  4. 隔离级别越高,越能保证数据的完整性和一致性,但是对并发性能的影响也越大。


以上是关于MySql事务隔离级别的主要内容,如果未能解决你的问题,请参考以下文章

MySQL的默认事务隔离级别是?

图解MySQL事务隔离级别

MySQL-8事务与隔离级别IO

MySQL事务隔离级别

数据库事务隔离级别 一般用哪个

MySQL 是如何实现四大隔离级别的