MySQL学习(16)事务隔离级别

发布时间 2023-11-13 23:45:45作者: 哪过晓得

事务隔离级别

前言

一次事务的执行,就是一次状态的转换。事务执行后,必须从一个一致性状态转换到下一个一致性状态,如果事务发生中止,也要回滚到最初的一致性状态。

什么是事务隔离级别

系统通过一些方法,使得并发执行的事务按照一定的顺序单独执行,或者最终执行的效果和单独执行一样。也就是说让事务“隔离”地执行。这就是事务的隔离性。

为了舍弃一部分隔离性来换取一部分性能,设立的不同的级别。隔离级别越低,就越可能发生越严重的问题。

事务并发执行中的一致性问题

  • 脏写

一个事务修改了另一个未提交事务修改过的数据。

  • 脏读

一个事务读取了另一个未提交事务修改过的数据。

严格意义指的是修改数据的事务发生回滚,使得读取到的数据不能保证一致性。

  • 不可重复读

一个事务修改了另一个未提交事务读取的数据。

严格意义指的是一个事务读取一个数据后,这个数据被另一个事务修改,再一次读取这个事务时,两次读取到的值不一致。

  • 幻读

一个事务先根据某些搜索条件查询出来一些记录,在该事务未提交时,另一个事务写入了一些符合该搜索条件的记录。

严格意义指的是一个事务先读取服务搜索条件的一些记录,然后另一个事务写入了符合搜索条件的记录,再读取符合搜索条件的记录时,两次读取的记录不一致。

SQL中的隔离级别

  • READ UNCOMMITTED:未提交读
  • READ COMMITTED:已提交读
  • REPEATABLE READ:可重复读
  • SERIALIZABLE:可串行化
隔离级别 脏读 不可重复读 幻读
READ UNCOMMITTED 可能 可能 可能
READ UNCOMMITTED 不可能 可能 可能
REPEATABLE READ 不可能 不可能 可能
SERIALIZABLE 不可能 不可能 不可能

MySQL的默认隔离级别是REPEATABLE READ

阅读学习《MySQL是怎样运行的》小孩子4919