MySql 事物的四大特性

就理解的四大特性如何实现进行一下分析。首先说:四大特性指的是哪四个特性:

  • 原子性(Atomicity)
  • 一致性(Consistency)
  • 隔离性(Isolation)
  • 持久性(Durability)

原子性

根据定义,原子性是指一个事务是一个不可分割的工作单位,其中的操作要么都做,要么都不做。即要么转账成功,要么转账失败,是不存在中间的状态!

隔离性

根据定义,隔离性是指多个事务并发执行的时候,事务内部的操作与其他事务是隔离的,并发执行的各个事务之间不能互相干扰。

持久性

根据定义,持久性是指事务一旦提交,它对数据库的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。

一致性

根据定义,一致性是指事务执行前后,数据处于一种合法的状态,这种状态是语义上的而不是语法上的。

数据的持久性

是通过 Innodb 的redo log 保证的。

在一个事务中的每一次SQL操作之后都会写入一个redo log到buffer中,在最后COMMIT的时候,必须先将该事务的所有日志写入到redo log file进行持久化(这里的写入是顺序写的),待事务的COMMIT操作完成才算完成。

优势:

  1. 顺序写入,比访问磁盘文件的随机访问速度快。
  2. 只需记录更改的一小部分,体积小,毕竟只记录了哪一页修改了啥,因此体积小,刷盘快。

原子性

undo log名为回滚日志,是实现原子性的关键,当事务回滚时能够撤销所有已经成功执行的sql语句,他需要记录你要回滚的相应日志信息。

例如

(1) 当你delete一条数据的时候,就需要记录这条数据的信息,回滚的时候,insert这条旧数据
(2) 当你update一条数据的时候,就需要记录之前的旧值,回滚的时候,根据旧值执行update操作
(3) 当年insert一条数据的时候,就需要这条记录的主键,回滚的时候,根据主键执行delete操作
undo log记录了这些回滚需要的信息,当事务执行失败或调用了rollback,导致事务需要回滚,便可以利用undo log中的信息将数据回滚到修改之前的样子。

未完待续— ---

你可能感兴趣的:(MySql)