隔离级别

  • 脏读

    一个事务读取了其他事务还没有提交的变更

  • 可重复读

    同样的条件,读取多次数据,后读出来的数据和之前的一样。 后读出来和之前不一样(因为另一个事务对该条件的数据修改提交了)

  • 幻读

    同样的条件,第一次和第二次读出来的记录数不一样。(因为另一个事务对该条件的数据插入/删除提交了)

  • 第一类丢失更新

    一个事务的回滚覆盖了另一个事务提交的update。

  • 第二类丢失更新

    一个事务提交的update覆盖了另一个事务提交的update。

而数据库的隔离级别可以看做这几种条件满足的组合:

隔离级别 脏读 可重复读 幻读 第一类丢失更新 第二类丢失更新
读未提交 READ-UNCOMMITTED
读已提交 READ-COMMITTED
可重复读 REPEATABLE-READ
序列化 SERIALIZABLE

所有的事务隔离级别都满足第一类丢失更新

查询事务隔离级别:

show variables like ‘%isolation’;

自动提交

链接

mysql的每一次修改都会自动开启事务,如果不设置自动提交就需要手动提交,否则看不到修改内容

隐式提交

隐式提交就是在开启一个事务后,去执行下图中的操作时,会先提交这个开启的事务

image.png
列:
begin
update
drop *

commit
当执行到drop这句时,会先自动提交这个事务。如果drop操作出错会发生回滚,但不会成功,因为此时事务已经提交了

查看设置

show variables like ‘autocommit’