MYSQL学习笔记2 事务隔离

事务隔离

  • ACID(Atomicity、Consistency、Isolation、Durability,即原子性、一致性、隔离性、持久性)
  • 脏读(dirty read)、不可重复读(non-repeatable read)、幻读(phantom read)的问题

SQL 标准的事务隔离级别包括:

读未提交(read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(serializable )

  • 读未提交是指,当前事务没提交变更,其他事务可以看到
  • 读提交是指,当前事务提交后,别的事务才能看到
  • 可重复读是指, 别的事务在本身过程中看到始终一样,包含读提交的情况,当前事务没提交,别的事务自始至终也看不到
  • 串行化,顾名思义是对于同一行记录,“写”会加“写锁”,“读”会加“读锁”。当出现读写锁冲突的时候,后访问的事务必须等前一个事务执行完成,才能继续执行。

回滚

  • 实际上每条记录在更新的时候都会同时记录一条回滚操作。记录上的最新值,通过回滚操作,都可以得到前一个状态的值。
  • 不同时刻启动的事务会有不同的 read-view,一条数据被多次修改,回滚会按照次序回滚

事务的启动方式

  • 推荐使用 set autocommit=1, 通过显式语句的方式来启动事务。autocommit=0会造成select 语句 长事务。
  • 你可以在 information_schema 库的 innodb_trx 这个表中查询长事务

你可能感兴趣的:(MYSQL学习笔记2 事务隔离)