mysql 事物没提交或者回滚,会让行锁没释放,可以查询当前事物表 然后kill 结束掉锁;
mysql事物隔离级别读未提交(READ UNCOMMITTED)
A事物能读到B事物未提交的数据,可能会产生脏读。
读已经提交 (READ COMMITTED)
A事物只能读到B事物已经提交的数据,可以避免脏读。
可重复读 (REPEATABLE READ)(innerDB默认)
A事物开始读到B事物的数据,后面就一直是这个数据。
串行化 (SERIALIZABLE)
变成单线程,一个事物一个事物执行。
什么是MVCC?
通过多版本并发控制,实现对数据库的并发访问,做到即使有读写冲突时,也能做到不加锁,非阻塞并发读
mvcc多版本控制原理
当前读:insert delete update
快照读:普通select查询
db_trx_id: 最近修改(修改/插入)事务ID:记录创建这条记录/最后一次修改该记录的事务ID
db_roll_ptr: 回滚指针,指向这条记录的上一个版本(存储于rollback segment里)
每次在做修改某行的时候,并且没有提交事物,该修改内容会插入到改行的版本链中,然后其他事物根据事物的隔离级别,去取版本链中的某一行数据,比如如果是读未提交的情况下,其他事物产生的视图里面的数据就是链表头节点,也就是 最新的数据。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)