Mysql事物

169 阅读2分钟

事物的四个隔离级别

  • 读未提交 read uncommitted

事物未提交时,其他事物就可以读取未提交的数据,会造成脏读,很少用

  • 读已提交 read committed

只能读取事物提交后的数据,避免脏读,也叫不可重复读

  • 可重复读 repeatable read

在同一事物中多次读取同样记录结果是一致的,造成幻读

  • 串行化 serializable

强制事物串行执行,避免了幻读,会在读取时给每一行加锁,导致大量超时和锁争用问题

MVCC:多版本并发控制(Multiversion Concurrency Control

  • 读锁S锁(共享锁)

A事物在读取时会给数据添加读锁,A和其他事物可以读取,不能修改,在A事物释放读锁前,其他事物读取数据时只能再次加S锁,只有A事物释放S锁之后才能对数据做修改

  • 写锁X锁(排他锁)

A事物对数据对象加上X锁,其他事物在X锁释放前不能对数据对象进行读写操作,A事物可对数据对象进行读写操作。

X锁又有表锁,行锁

  • MVCC的相关字段

在innodb中行记录除了基础数据信息外,还有两个字段记录事物Data_Trx_id 和 Data_roll_ptr Data_trx_id 表示最后一次进行修改记录的事物id Data_roll_ptr:表示回滚段,记录对应 undo.log中的 本行修改前的信息

数据库的四个基本要素(acid)

  • 原子性

一个事物的所有操作,要么全部完成,要么全部失败,不会结束在中间环节。执行中发生错误,会被回滚到事物开始前的状态(undo.log)。

  • 一致性

在事物开始之前和事物结束后,数据库的数据完整性没有被破坏。主要保护性和不变性。如:多个账户进行互相转账操作,并发事物结束后,账户总金额保持不变。

  • 隔离性

允许多个事物对数据库并发进行读写的能力,防止事物并发执行时由于交叉执行导致的数据不一致

  • 持久性

事物结束后,对数据的修改就是永久的,可以理解为保存在物理内存中 [参考]:www.cnblogs.com/kismetv/p/1…