MYSQL事务笔记

原创
2018/12/17 14:10
阅读数 57

MYSQL数据库中有不太的数据引擎,常用的有ISAM、INNODB,其中INNODB是支持事务操作的,ISAM不支持事务操作。

一、事务的四大特性(ACID):

  1. 原子性:事务开始后的所有操作,要么全部成功,要么全部失败,不可能出现部分成功,部分失败。事务开始后执行失败,将会整个回滚到事务开始的状态,即事务的操作是不可分割的,所以称之为原子操作。
  2. 一致性:事务开始前和开始后,数据库的完整性约束没有被破坏。比如A向B转账,不可出现A扣了钱,B却没有收到钱。
  3. 隔离性:同一时间,只允许一个事务请求同一数据,不同事务直接彼此没有任何干扰。比如A正从一张银行卡中取钱,再A取钱的事务结束前,任何人不能向A这张卡上转账或取钱等操作。
  4. 持久性:事务完成后,事务对数据库的所有操作都会被数据库保存,不能回滚。

二、 事务“隔离性”深入解读:

  1. 对于事务的四大特性:原子性、一致性、持久性都好理解,但隔离性有点难于理解。
  2. 事务的隔离性中又包含了事务的隔离级别:
事务隔离级别 脏读 不可重复读 幻读
读未提交(read-uncommitted)
不可重复读(read-committed)
可重复读(repeatable-read)
串行化(serializable)

     脏读:事务A读取了事务B更新的数据,然后B回滚了操作,那么A读取到的数据就是脏数据。

     不可重复读:事务A多次读取同一数据,事务B在事务A多次读取数据的过程中,对数据进行了更新并提交,导致事务A多次读取的数据不一致。

      幻读:事务A对数据进行更新操作,在更新的过程中,事务B对某一数据进行了新增和提交。当事务A提交后,发现部分数据没有更新,就像出现了幻觉一样。

    注:不可重复读和幻读很相似,不可重复读侧重于修改,幻读侧重于新增或删除。解决不可重复读的问题只需要锁住满足条件的行,解决幻读需要锁表。

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
1 收藏
0
分享
返回顶部
顶部