具体细节 请去掘金购买《MySQL 是怎样运行的:从根儿上理解 MySQL》
事务特性
原子性(Atomicity)
- 1.对于任何操作(一条或者多条语句)的执行,要么全部成功要么失败
隔离性(Isolation)
- 1.两种不同的操作之间不能相互影响
一致性(Consistency)
- 1.如果数据库中的数据全部符合我们规定的约束(all defined rules),我们说这些数据就是一致的
- 2.比如唯一性,不为空这些约束都是保证数据一致性。
- 3.还有的一致性比如,转账过程中余额总和不变也算是一致性。
持久性(Durability)
- 1.当我们数据库数据更改之后需要持久化落盘才能保证其持久性。
事务的概念
事务有以下几种分类
- 1.活动的(active):事务对应的数据库操作正在执行过程中时
- 2.部分提交的(partially committed):当事务中的最后一个操作执行完成,但由于操作都在内存中执行,所造成的影响并没有刷新到磁盘时
- 3.失败的(failed):当事务处在活动的或者部分提交的状态时,可能遇到了某些错误(数据库自身的错误、操作系统错误或者直接断电等)而无法继续执行,或者人为的停止当前事务的执行
- 4.中止的(aborted):如果事务执行了半截而变为失败的状态,则需要执行回滚,回滚完毕后就是中止。
- 5.提交的(committed):当一个处在部分提交的状态的事务将修改过的数据都同步到磁盘上之后,我们就可以说该事务处在了提交的状态。
MySQL中事务的语法
- 1.BEGIN 和START TRANSACTION有着相同的功效,都标志着开启一个事务
- 2.START TRANSACTION后面可以带着修饰符,READ ONLY(只读事务),READ WRITE(读写事务),WITH CONSISTENT SNAPSHOT(启动一致性读--快照读)
- 3.READ ONLY和READ WRITE是用来设置所谓的事务访问模式的,两者不能共存,默认是读写。
- 4.commit是提交事务
- 5.rollback是中止事务。
自动提交
- 1.通过系统变量autocommit来开启自动提交。
- 2.显式的的使用START TRANSACTION或者BEGIN语句开启一个事务会关闭当前事务的自动提交
- 3.或者强制把系统变量autocommit的值设置为OFF来关闭自动提交
隐式提交
- 1.定义或修改数据库对象的数据定义语言(Data definition language,缩写为:DDL,比如CREATE、ALTER、DROP。
- 2.隐式使用或修改mysql数据库中的表:ALTER USER、CREATE USER、DROP USER、GRANT、RENAME USER、REVOKE、SET PASSWORD
- 3.事务控制或关于锁定的语句:当我们在一个事务还没提交或者回滚时就又使用START TRANSACTION或者BEGIN语句开启了另一个事务时,会隐式的提交上一个事务
- 4.当前的autocommit系统变量的值为OFF,我们手动把它调为ON时,也会隐式的提交前边语句所属的事务。
- 5.加载数据的语句:使用LOAD DATA语句来批量往数据库中导入数据时,也会隐式的提交前边语句所属的事务。
- 6.使用START SLAVE、STOP SLAVE、RESET SLAVE、CHANGE MASTER TO等语句时也会隐式的提交前边语句所属的事务
- 7.使用ANALYZE TABLE、CACHE INDEX、CHECK TABLE、FLUSH、 LOAD INDEX INTO CACHE、OPTIMIZE TABLE、REPAIR TABLE、RESET等语句也会隐式的提交前边语句所属的事务。
保存点
- 1.定义保存点:SAVEPOINT 保存点名称;
- 2.回滚到保存点:ROLLBACK [WORK] TO [SAVEPOINT] 保存点名称;如果ROLLBACK语句后边不跟随保存点名称的话,会直接回滚到事务执行之前的状态。
- 3.删除保存点:RELEASE SAVEPOINT 保存点名称;