MySQL
事务
特性
- 原子性(Atomicity):事务是不可分割单位,事务中的操作要么都发生,要么都不发生
- 一致性(Consistency):事务开始和事务结束后,数据库的完整性约束没有被破坏。如转账成功或失败后总额不变
- 隔离性(Isolation):多个事务并发访问时,事务之间是隔离的,一个事务不应该影响其它事务运行效果,事务不会查看到中间状态的数据
- 持久性(Durability):事务完成后,该事务所对数据库的更改持久的保存在数据库中
隔离级别
- 读未提交(READ-UNCOMMITTED):在读数据时不会检查或使用任何锁。因此,在这种隔离级别中可能读取到没有提交的数据。
- 读已提交(READ-COMMITTED):只读取提交的数据并等待其他事务释放排他锁;读数据的共享锁在读操作完成后立即释放。
- 解决了脏读的问题;互联网项目中常用。
- 条件列未命中时只锁行;先由聚簇索引进行全部扫描,发现不满足后调用
unlock_row
方法解锁 - 半一致性读(semi-consistent)特性增加了 update 操作的并发性
- 可重复读(REPEATABLE-READ):像读已提交读级别那样读数据,但会保持共享锁直到事务结束。
- 可以防止脏读和不可重复读;
- 是MySQL的默认隔离级别;
- 存在间隙锁导致出现死锁机率大于RC;
- 条件列未命中索引会锁表:先由聚簇索引进行全部扫描将整个表上锁
- 串行化(SERIALIZABLE):工作方式类似于可重复读。但它不仅会锁定受影响的数据,还会锁定这个范围,这就阻止了新数据插入查询所涉及的范围。
Index