数据库事务是mysql执行操作的最小逻辑单位,一个事务可以包含一个或者多个sql语句,这些sql要么都执行成功要么都执行失败。并发操作下,事务的控制使多个事务的sql对同一对象的修改是安全的。
01事务的四个特性概述原子性(Atomicity)
原子性是指事务中的所有操作作为一个整体,要么全部成功,要么全部失败。
原子性能实现的关键是在失败的时候能够发生回滚,这依赖于undolog日志。事务在更改数据之前会将要更改的数据备份到undolog中(undolog会保存更改前的数据,这是一个行级别的历史数据),如果发生了错误或者用户执行了rollback,就可以通过undolog将数据恢复到事务开始之前的状态。
Undolog怎么做到回滚的呢?你可以理解为:
当你在事务中delete一条记录时,undolog会记录一条对应的insert记录。
当你在事务中insert一条记录的时候,undolog会记录一条对应的delete记录
当你在事务中update一条记录时,它记录一条相反的update记录。
当rollback回滚的时候,就会执行这些相反的操作。
当然了,undolog里面并不会真的记录这些一条条的sql命令,而是存着变更前行数据的内容。
隔离性(isolation)
隔离性是指并发执行的事务不会相互影响,并发执行的操作的结果和他们串行执行时的结果一样。
隔离性是通过锁和MVCC来实现的。锁会再后面的章节中详述,这里先不按下不表,只需要知道隔离性是通过锁来实现的即可。
持久性(Durability)
持久性是指事务一旦提交,对数据库的更新是持久的,事务的所有更改都写入到了磁盘中。之后任何的事务或者故障都不会导致上一个事务数据丢失。
持久性是通过redolog日志实现的(前滚日志),redo日志记录着一个事务中更改后的数据。
如果事务