事务ACID特性
- 原子性(atomicity)
一个事务必须被视为一个不可分割的最小单元,整个事务的所有操作要么全部提交成功,要么全部失败回滚 - 一致性(consistency)
数据库从一个正确的状态转换到另一个正确的状态(所有的状态满足预定的约束),状态的正确与否应该是由应用层自己定义。其用来保证所有的约束没有被打破 - 隔离性(isolation)
通常来说,一个事务所做的修改在最终提交以前,对其他事务是不可见的 - 持久性(durability)
一旦事务提交,所作的修改会被永久保存到数据库中
隔离级别
- 读未提交(Read Uncommitted)
事务中的修改,即使没有提交,对其他事务也都是可见的,一般实际应用中很少使用。无法解决脏读问题(B读取到事务A未提交的数据) - 读提交(Read Committed)
一个事务从开始直到提交后,所做的修改对其他事务都是不可见的。无法解决不可重复读(事务A读取某一数据,执行过程中B改变了该数据,事务A再次读取该数据时数据改变了) - 可重复度(Repeatable Read)
保证了在同一个事务中多次读取的记录结果是一样的。无法解决幻读(当事务A读取某个范围的记录时,B在该范围内插入了新的记录,事务A再次夺取该范围内的记录时,会产生幻行) - 可串行化(Serializable)
最高的隔离级别,强制事务串行执行,会在每一个读取的数据上都枷锁,可能导致大量的超时和锁竞争