我们的数据库一般都会并发执行多个事务,多个事务可能会并发的对相同的一批数据进行增 删改查操作,可能就会导致我们说的脏写、脏读、不可重复读、幻读这些问题。 这些问题的本质都是数据库的多事务并发问题,为了解决多事务并发问题,数据库设计了事 务隔离机制、锁机制、MVCC多版本并发控制隔离机制、日志机制,用一整套机制来解决多 事务并发问题。
read uncommit 脏读
read commit 不可重复度
repeatable read 幻读 (默认级别)
select快照读, insert update delete 是当前读
serializable 串行
原理: select 的时候加了一个读锁, (最低的隔离级别加个读锁就可以实现串行化)
读锁 (共享锁, s锁) : select… lock in share model (
多个事务可以同时读取同一个资源, 不允许其他事务写锁
写锁 (排他锁, x锁): select… for update
阻塞其他写锁和读锁; MySQL默认: update delete insert都会加写锁
多版本并发控制本可以做到读写不阻塞, 读写可以并行执行, 解决串行化效率太低的问题
select操作
原理:
undo日志版本链
trx_id: 事务id
roll_pointer:回滚指针 → undo log