事务隔离
- 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 这个表中查询长事务
网友评论