1.什么是事务
事务是一条或多条数据库操作语句的组合,具备ACID四个特点。
原子性(Atomicity):一个事务要么全部执行,要么全部不执行。也就是说一个事务不可能执行到一半就停止了。比如:去超时购买商品,付钱和拿到商品这两步要么同时执行,要么都不执行。
一致性(Consistency):指事务的运行不会改变数据库中数据的一致性。比如:a+b=10,a改变了,b也应该随之变化。
隔离性(Isolation):一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是个例的,并发执行的各个事务之间不能相互干扰。
持久性(Durability):一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。当事务提交之后,数据会持久化到硬盘,修改是永久性的。
事务并发会发生什么问题?
脏读
一个事务在执行的过程中读取到了其他事务还没有提交的数据。
不可重复读
事务A在读取一条记录时,这个事务还没有结束,事务B对这个记录进行修改,事务A再次读取这条记录时,记录发生了变化。也就是事务A两次读取到的数据发生了变化成为不可重复读。
幻读
事务A读取表中的数据,事务B在事务A还没有结束时,进行了插入操作,事务A再次读取,发现表中有新的数据,就好像发生了幻觉一样。
事务的隔离级别:
隔离级别分为四种:
读未提交:READ-UNCOMMITTED
读已提交:READ-COMMITTED
可重复读:REPEATABLE-READ
串行:SERIALIZABLE
上面四种隔离级别越来越强,会导致数据库的并发性也越来越低。Mysql的默认级别是REPEATABLE-READ
隔离级别 | 脏读 | 不可重复读 | 幻读 |
READ-UNCOMMITTED | 有 | 有 | 无 |
READ-COMMITTED | 无 | 有 | 无 |
REPEATABLE-READ | 无 | 无 | 有 |
SERIALIZABLE | 无 | 无 | 无 |
注意:幻读只会在可重复读级别中才会出现,其他级别中不存在。
来源:CSDN
作者:codingToMaster
链接:https://blog.csdn.net/codingToMaster/article/details/104737048