Mysql的事务机制
事务操作原理
- 需要操作的记录会被拷贝到undo日志中
- 具体的增删查改操作的结果记录到redo日志中去
- 如果增删查改没有问题,就会吧redo日志同步到数据文件中去
事务特性
** 事务具有原子性,一致性,隔离性,持久性这4大特性 **
-
事务的原子性:
事务是一个或多个SQL语句组成的整体,要么全部执行成功,要么全部执行失败,如果要回滚事务,那么mysql会给undo,redo日志打上标记,这时数据就不会同步到数据文件中去了。 -
事务的一致性:
上图的展示的是,不同事务在执行时,是相互独立的,在redo日志中操作时,临时数据不能相互访问,这样子为了防止数据错乱
-
事务的隔离性:
-
事务的持久性:
事务案例
根据上图的事务流程做一个说明:
- 手动开启一个事务
- 在操作Update前,会拷贝需要update的记录到undo日志中去
- 再执行Update语句
- Update操作的结果记录在redo日志中去,
- 在操作Delete前,会拷贝需要delete的记录到undo日志中去
- 再执行Delete语句
- Delete操作的结果记录在redo日志中去
- 提交事务,把redo中的记录同步到数据文件中去
- 如果事务回滚,就是把undo,redo的日志的数据做了标记就行,这样子就不会把数据同步到数据文件中去了
出现宕机或者断电的情况:
这个时候不用担心数据丢失,因为新修改的数据可以从redo日志中同步到数据文件中
如果不需要同步,直接恢复到事务执行之前的数据,就从undo日志中同步到数据文件中去
总结
这是对事务的学习总结,后续还会总结分布式事务