MySQL 事务,锁

ACID

  • Atomic同一个事务里,要么都提交,要么都回滚

  • Consistency即在事务开始之前和事务结束之后,数据库的完整性约束没有被破坏

  • Isolation 并发事务间的数据是彼此隔离的

  • Durabiliy 事务提交后,所有结果务必被持久化

支持事务:InnoDB,NDBCluster, TokuDB

不支持事务:MyISAM,MEMORY

  1. 隔离性通过锁实现

  2. 原子性,一致性,持久性通过数据库的redo和undo来完成

撤销日志: UNDO LOG (现在正在活跃的事务,但还没有提交,或者还没有完成check point)

重做日志:REDO LOG (已经提交的事务)

REDO 和 UNDO 在做数据库恢复的时候的作用是相反的,

RODO:在做数据库恢复的时候,如果有事务还没有真正的提交,那么需要前滚(扫描RODO LOG检查哪些事务已经提交了,但还没有持久化到数据文件【table spacs, data table spage】里的,再把这些重做一次事务【再重新提交一次】)

UNDO: 正好是相反 找到还没有提交的事务 但是再undo log里需要进行一次回滚,就是把已经提交的事务回滚掉

在做数据库恢复的时候要做这样的一个过程

autocommit = 0|1

设置事务自动 开启|关闭

显示事务 启动 | 关闭

  1. 以START TRANSACTION/BEGIN开始事务

  2. 以COMMIT/ROLLBACK TRANSACTION结束事务

隐性事务提交

主要是DDL,DCL会引发事务的隐性提交

SQL四种语言:DDL,DML,DCL,TCL