Mysql数据库事务详解
80年代中国人结婚四大件:手表、自行车、缝纫机、收音机(三转一响)。要把事务娶回家需要四大件,所以事务很刻薄(ACID),四大件清单:原子性(Atom)、一致性(Consistent)、隔离性(Isolate)、持久性(Durable)。ACID就是数据库事务正确执行的四个基本要素的缩写。
- 原子性:要么不谈,要谈就要结婚!
对于其数据修改,要么全都执行,要么全都不执行。如果系统只执行这些操作的一个子集,则可能会破坏事务的总体目标。最典型的问题就是银行转帐问题。
- 一致性:恋爱时,什么方式爱我;结婚后还得什么方式爱我;
数据库原来有什么样的约束,事务执行之后还需要存在这样的约束,所有规则都必须应用于事务的修改,以保持所有数据的完整性。事务结束时,所有的内部数据结构(如 B 树索引或双向链表)、完整性约束(索引、主键)都必须是一致的。
- 隔离性:闹完洞房后,是俩人的私事。
事务查看数据时数据所处的状态,要么是另一并发事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看中间状态的数据。当事务可序列化时将获得最高的隔离级别。隔离性是事务机制里相对来说,比较复杂的,下文另说。
- 持久性:一旦领了结婚证,无法后悔。
修改即使出现致命的系统故障也将一直保持。不要告诉我系统说commit成功了,回头电话告诉我,服务器机房断电了,我的事务涉及到的数据修改可能没有进入数据库。