1.什么是事务
事务是一组操作,要么全部成功,什么全部失败的操作。
2.事务的ACID特性
1)原子性
要么全部失败,要么全部成功
2)一致性
状态前和状态后是一样的,例子:A给B转账,A和B加起来的总金额不变
3)隔离性
事务与事务之间互相独立,互不影响。如果事务没有隔离性,则会导致脏读、不可重复读取、幻读。
4)持久性
事务一旦提交,则是永久地保留在磁盘上,即使系统故障也改变不了。
3.事务没有隔离性导致的问题?(脏读、不可重复读、幻读)
1)脏读
脏读:一个事务读取了另一个未提交的事务。
例如:A事务读取了未提交的B事务的数据。
2)不可重复读
不可重复读:A事务读取了一个数据值,但是别一个事务修改了这个值,后来A事务再次读取这个数据值。
例如:A事务读取了数据值为1,B事务修改了这个数据值为2并且提交事务,但是A事务后来再次读取这个值,发现这个数据值为2并非为1。
3)幻读
幻读:A事务读取了一批数据值,后来B事务插入了一条记录并提交事务,但是后来A事务再次读取这批数据值。
例如:A事务读取数据值为1的所有数据为N条,但是B事务又插入了一条数据并提交,后来A事务再次访问时,发现是N+1条数据。
总结:1.脏读是读取了没有提交的事务,而不可重复读和幻读是读取的是已经提交的事务。
2.不可重复读是因为另外一个事务修改的具体值,是针对于数据项。而幻读是因为另外一个事务增加或者删除一条数据,是针对一批数据记录,而非数据项。
原文:https://www.cnblogs.com/cjf-lyt/p/12270844.html