版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zz17zz/article/details/82144134
事务的ACID特性
ACID,指数据库事务正确执行的四个基本要素的缩写。包含:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。一个支持事务(Transaction)的数据库,必须要具有这四种特性,否则在事务过程(Transaction processing)当中无法保证数据的正确性,交易过程极可能达不到交易方的要求。
原子性
将事务是为不可分割的最小单元,整个事务中的操作要不全部提交成功,要么失败全部回滚。不可能只执行其中的一部分操作。
一致性
数据库总是从一个一致性的状态转换成另一个一致性的状态。
隔离性
一个事务所做的修改在最终提交之前,对其它事务时不可见的。
持久性
一旦事务提交,则所做的修改会永远保存到数据库中。此时即使系统崩溃,修改的数据也不会丢失。
事务的四种隔离级别
未提交读
事务中的修改即使没有提交对其它事务也是可见的。
提交读(大多数数据库系统默认隔离级别)
一个事务从开始到提交之前所作的任何事务对其他事务都是不可见的。
可重复读(MySQL默认隔离级别)
同一事物中多次读取同样的记录的结果是一样的。
可串行化
最高隔离级别,强制事务串行。
四个可能引发的问题
脏读
事务可以读取未提交的数据。
不可重复读
两次执行同样的查询,可能会得到不一样的结果。
幻读
当某个事务再次读取该范围的记录时,另一个事务又在该范围插入了新的记录,当之前的事务再次读取该范围的记录时,会产生幻行。
加锁读
由于在每一行的数据上都加锁,会导致大量的超时和锁争用问题。
各隔离级别和导致的问题
隔离级别 |
脏读 |
不可重复读 |
幻读 |
加锁读 |
未提交读 |
是 |
是 |
是 |
否 |
提交读 |
否 |
是 |
是 |
否 |
可重复读 |
否 |
否 |
是 |
否 |
可串行化 |
否 |
否 |
否 |
是 |
参考 《高性能MySQL》