MySQL

事务

特性

  • 原子性(Atomicity):事务是不可分割单位,事务中的操作要么都发生,要么都不发生
  • 一致性(Consistency):事务开始和事务结束后,数据库的完整性约束没有被破坏。如转账成功或失败后总额不变
  • 隔离性(Isolation):多个事务并发访问时,事务之间是隔离的,一个事务不应该影响其它事务运行效果,事务不会查看到中间状态的数据
  • 持久性(Durability):事务完成后,该事务所对数据库的更改持久的保存在数据库中

隔离级别

  • 读未提交(READ-UNCOMMITTED):在读数据时不会检查或使用任何锁。因此,在这种隔离级别中可能读取到没有提交的数据。
    • 可能会导致脏读、幻读或不可重复读
  • 读已提交(READ-COMMITTED):只读取提交的数据并等待其他事务释放排他锁;读数据的共享锁在读操作完成后立即释放。
    • 解决了脏读的问题;互联网项目中常用。
    • 条件列未命中时只锁行;先由聚簇索引进行全部扫描,发现不满足后调用 unlock_row 方法解锁
    • 半一致性读(semi-consistent)特性增加了 update 操作的并发性
  • 可重复读(REPEATABLE-READ):像读已提交读级别那样读数据,但会保持共享锁直到事务结束。
    • 可以防止脏读和不可重复读
    • MySQL的默认隔离级别;
    • 存在间隙锁导致出现死锁机率大于RC;
    • 条件列未命中索引会锁表:先由聚簇索引进行全部扫描将整个表上锁
  • 串行化(SERIALIZABLE):工作方式类似于可重复读。但它不仅会锁定受影响的数据,还会锁定这个范围,这就阻止了新数据插入查询所涉及的范围。
 
Index