一、事务的基本要素(ACID)
1、原子性(Atomicity):MySQL 事务开始后所有操作,要么全副做完,要么全副不做,不可能停滞在中间环节。事务执行过程中出错,会回滚到事务开始前的状态,所有的操作就像没有产生一样。也就是说事务是一个不可分割的整体,就像化学中学过的原子,是物质形成的根本单位。
2、一致性(Consistency):事务开始前和完结后,数据库的完整性束缚没有被毁坏。比方 A 向 B 转账,不可能 A 扣了钱,B 却没收到。其实一致性也是因为原子型的一种体现
3、隔离性(Isolation):同一时间,只容许一个事务申请同一数据,不同的事务之间彼此没有任何烦扰。比方 A 正在从一张银行卡中取钱,在 A 取钱的过程完结前,B 不能向这张卡转账。串行化
4、持久性(Durability):事务实现后,事务对数据库的所有更新将被保留到数据库,不能回滚。
二、事务的并发问题
1、脏读:事务 A 读取了事务 B 更新的数据,而后 B 回滚操作,那么 A 读取到的数据是脏数据,与表中最终的理论数据不统一
2、不可反复读:事务 A 屡次读取同一数据,事务 B 在事务 A 屡次读取的过程中,对数据作了更新并提交,导致事务 A 屡次读取同一数据时,后果 不统一。读取后果与上次后果不统一
3、幻读:系统管理员 A 将数据库中所有学生的问题从具体分数改为 ABCDE 等级,然而系统管理员 B 就在这个时候插入了一条具体分数的记录,当系统管理员 A 改完结后发现还有一条记录没有改过来,就如同产生了幻觉一样,这就叫幻读。批改过去了但又被改了,导致后果和预期不一样
小结:不可反复读的和幻读很容易混同,不可反复读侧重于批改,幻读侧重于新增或删除。解决不可反复读的问题只需锁住满足条件的行,解决幻读须要锁表