事务特性:ACID
特性
数据库管理系统中事务(transaction)的四个特性(分析时根据首字母缩写依次解释):原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)
所谓事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。(执行单个逻辑功能的一组指令或操作称为事务)
原子性
指事务是一个不可再分割的工作单元,事务中的操作要么都发生,要么都不发生。
一致性
一致性是指在事务开始之前和事务结束以后,数据库的 完整性约束 没有被破坏。这是说数据库事务不能破坏关系数据的完整性以及业务逻辑上的一致性。
如A给B转账,不论转账的事务操作是否成功,其两者的存款总额不变(这是业务逻辑的一致性,至于数据库关系约束的完整性就更好理解了)。
隔离性
多个事务并发访问时,事务之间是隔离的; 即事务A不会看到事务B的中间状态(脏读).
完全的隔离性要求数据库同一时间只能执行一条事务, 但这样会严重影响性能.
持久性
意味着在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中
事务并发问题
脏读
事务a读到了事务b还没有提交的数据
不可重复读
前后读取结果不一致. 事务a读取过程中, 事务b进行了更新.
解决: 锁住满足条件的行
mysql Innodb引擎默认的update语句默认加相关数据行的排它锁, 所以事务隔离级别为: 可重复读
幻读
事务a 读完后 事务b新增了数据(事务a没有读到)
解决: 锁表
事务隔离级别
读未提交
允许脏读
读已提交
只能读到提交的事务数据(没有脏读, 但是可能会产生前后读取结果不一致)
可重复读
不会产生前后读取结果不一致, 但是会有幻读
串行化
最严格的的隔离级别, 要求所有事务严格串行执行, 不能并发执行