美文网首页
MYSQL 事务特性

MYSQL 事务特性

作者: 蓉漂里的小白 | 来源:发表于2021-02-03 15:30 被阅读0次

    Mysql事务包含ACID四个特性,A: 原子性, C:一致性, I:隔离性, D:持久性

    原子性

    定义:事务执行要么全部成功,要么全部失败,不能出现部分成功部分失败

    实现:undo日志

    Undo日志:

    是一个逻辑日志,记录的是事务执行前的数据状态。在事务执行前先把数据都备份一份到undo日志中,然后再执行事务操作。如果执行过程出了异常或错误进行rollback 系统就会将undo日志中的数据恢复到事务执行前的状态。

    例如:事务执行了insert 语句 -- undo日志就记录一条Delete语句

    事务执行了update + 10语句 -- undo日志就记录一条update - 10语句

    持久性

    定义:事务一旦提交了,对数据的修改就是永久性的

    实现:redo日志

    Redo日志:

    记录的是事务执行完成后的数据状态,在事务提交前只需要将redo 日志持久化到磁盘就可以了,不需要持久化具体的数据。如果在持久化数据时候系统奔溃了就只需要将redo日志中的数据恢复到数据系统中就ok了。


    image.png

    隔离性

    定义: 事务之间的执行互不影响

    实现:锁

    事务隔离级别:read uncommit, read commit, repeatable read, serlalizable

    Read uncommit: 可以读到其他事务未提交的结果

    read commit: 可以避免脏读

    repeatable read: 可以避免脏读,不可以重复读

    serlalizable:可以避免脏读,幻读,不可以重复读

    脏读:事务A读到了事务B还没有提交的数据

    幻读:同一个事务中连续二次读的数据条数不一样(针对insert操作)

    不可重复读:同一个事务中对同一条数据连续读取二次,结果不一样(针对update操作)

    一致性

    定义:事务执行前后,数据必须是从一个一致性状态到另一个一致性状态。

    所谓的一致性状态包含:1):事务执行后数据依然瞒住完整性约束

    2):事务执行后,数据的状态代表了真实世界的数据状态

    事务的原子性 + 隔离性 + 持久性 保证了数据事务的一致性。

    相关文章

      网友评论

          本文标题:MYSQL 事务特性

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