事务的特点、隔离级别、及相关的现象

MySQL中的事务

  • 事务提供一种“要么什么都不做,要么做全套(All or Nothing)”的机制,她有ACID四大特性
  1. 原子性(Atomicity):事务作为一个整体被执行,包含在其中的对数据库的操作要么全部被执行,要么都不执行。
  2. 一致性(Consistency):事务应确保数据库的状态从一个一致状态转变为另一个一致状态。一致状态是指数据库中的数据应满足完整性约束。除此之外,一致性还有另外一层语义,就是事务的中间状态不能被观察到(这层语义也有说应该属于原子性)。
  3. 隔离性(Isolation):多个事务并发执行时,一个事务的执行不应影响其他事务的执行,如同只有这一个操作在被数据库所执行一样。
  4. 持久性(Durability):已被提交的事务对数据库的修改应该永久保存在数据库中。在事务结束时,此操作将不可逆转。
  • 事务的隔离级别
  1. 读未提交(read uncommitted)
    1. A事务读取到B事务未提交的数据,可能B事务回滚,那么A事务读取的应该是无效的数据,也称为脏读
    2. 写 行数据时不可同时写,避免了更新失效,但可读,所以可能造成脏读。
  2. 读已提交(read committed)
    1. 写的事务,将禁止写,且禁止读该写入的数据
    2. 读的事务,则允许其他事务读写
    3. 当A事务前后两次读同一条数据时,假如在中间B事务对此数据做了更新并提交事务,那么A事务前后两次读取的数据则不一致,称为重复读
  3. 可重复读(Repeatable read)
    1. 读的事务开启,不允许其他修改操作的事务,但可以读
    2. 当有insert操作时,可能引发读事务的前后总数不一致,称为幻读
  4. 串行化(serializable)
    1. 锁表操作,事务只能排队执行,不能并发执行,所以可以避免 脏读、重复读不一致、数量的幻读
原文地址:https://www.cnblogs.com/erfsfj-dbc/p/12165358.html