美文网首页
MySQL事务

MySQL事务

作者: SHUerHan | 来源:发表于2018-07-14 00:10 被阅读0次

事务

由一系列数据库操作组成的一个完整的逻辑过程,的是满足ACID特性的一组操作,可以通过Commit提交一个事务,也可以使用Rollback进行回滚

  1. 原子性(Atomicity): 事务中所有操作要么全部成功,要么全部失败
  2. 一致性(Consistency): 事务从一种一致的状态到另一种一致的状态,不会破坏系统的完整性
  3. 隔离性(Isolation): 并发事务之间相互影响的程度
  4. 持久性(Durability): 事务所有成功的操作对系统的影响是永久存在的

并发一致性问题

  • 脏读: 事务A读取事务B修改后的记录, 之后事务B失败rollback之后事务A读到了错误的数据
  • 不可重复读: 事务A读取某条数据之后事务B成功修改了该记录,A再次读取同条记录前后读取不一致
  • 幻影读: 事务A根据某种检索条件读取了若干条记录,事务B插入一条记录,A再次相同检索条件读取了若干条记录前后不一致

锁类型

  • 共享锁(读锁, S锁): 事务对数据加共享锁, 事务对数据只可以读取不可以更新, 其他事务只可以加共享锁, 不可以加互斥锁
  • 互斥锁(写锁, X锁): 事务对数据加互斥锁, 事务对数据可以读取也可以更新, 其他事务不可以加共享锁, 也不可以加互斥锁
  • 可以按照锁的粒度把数据库锁分为行级锁(INNODB引擎),表级锁(MYISAM引擎),页级锁(BDB引擎 )。

隔离级别

  • 未提交读(Uncommit Read): 事务读取时对数据未加锁, 更新时对数据加行级共享锁(我觉得这句话有问题, 因为共享锁是无法修改数据的),
  • 提交读(Commit Read): 事务读取时对数据加行级共享锁, 一旦读取完就释放掉, 更新时对数据加行级排它锁, 直到事务结束, 可以避免脏读
  • 可重复读(Repeatable Read): 事务读取时对数据加行级共享锁, 直到事务结束, 更新时对数据加行级排它锁, 直到事务结束, 可以避免可重复读

MVCC(多版本并发控制)

在每条记录后面添加两个字段记录添加的创建时间(创建版本号)和删除时间(删除版本号), 读取记录的时候读取创建时间小于当前, 删除时间大于当前

相关文章

网友评论

      本文标题:MySQL事务

      本文链接:https://www.haomeiwen.com/subject/yzzspftx.html