vlambda博客
学习文章列表

数据库事务特性以及隔离级别

  • 事务四大特性(ACID)原子性、一致性、隔离性、持久性?

1.原子性:要么都执行,要么都不执行。

2.一致性:合法的数据才可以被写入。

3.隔离性:允许多个用户并发访问(关于隔离,又对应事务不同的隔离级别)

4.持久性:事务结束后,事务处理的结果必须得到固化。即一旦提交,对数据库改变是永久的。

  • 事务的并发?事务隔离级别,每个级别会引发什么问题,MySQL默认是哪个级别?


从理论上来说, 事务应该彼此完全隔离, 以避免并发事务所导致的问题,然而, 那样会对性能产生极大的影响, 因为事务必须按顺序运行, 在实际开发中, 为了提升性能, 事务会以较低的隔离级别运行, 事务的隔离级别可以通过隔离事务属性指定

事务并发可能导致的问题:

问题 解释
脏读 在一个事务中,读到了另外一个事务未提交(或已回滚)的变更
不可重复读 事务 A 多次读取同一数据,事务 B 在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果因此本事务先后两次读到的数据结果会不一致
幻读 事务T1对一个表中所有的行的某个数据项做了从“1”修改为“2”的操作 这时事务T2又对这个表中插入了一行数据项,而这个数据项的数值还是为“1”并且提交给数据库。而操作事务T1的用户如果再查看刚刚修改的数据,会发现还有跟没有修改一样,其实这行是从事务T2中添加的,就好像产生幻觉一样,这就是发生了幻读。

事务隔离级别以及每一个隔离级别可能存在的问题

隔离级别 脏读 不可重复读 幻读
读未提交
读已提交
可重复读(Mysql默认级别)
串行化 否