MySQL知识总结
《MySQL是怎样运行的》知识总结
18 事务
数据库状态反映的是现实世界的状态,数据库的状态改变应该要符合现实世界的规则
事务应该具有的特性是:
原子性
事务是一个不可分割的操作单位,要么执行,要么不执行(事务包含一个或多个数据库的操作,数据库进行操作时,可能发生错误)
隔离性
事务之间应该是隔离的,不应该干扰其他事务(事务并发问题)
一致性
事务对数据库的修改是从一个一致性状态转换为另一个一致性状态。(一致性,数据库的数据应该要满足现实世界的约束)
数据库提供一部分的一致性,但更多的一致性需要靠程序员保证,一致性需求不应该交给数据库完成
MySQL支持使用check语法自定义约束,但MySQL不会对自定义约束进行检查
持久性
事务对数据库的修改应该是持久的(事务提交后,数据的修改应该保存至磁盘中,无论发生什么事故,都不应该丢失)
事务的状态
- 活动:事务正在执行
- 部分提交:事务执行了最后的操作,修改还在内存中
- 提交:事务的修改刷新到磁盘中
- 失败:执行事务时,人为终止或发生了错误
- 中止:事务发生错误后,对事务进行回滚
语法
begin;
# 执行操作
commit;# rollback
start transaction [read only, read write , with consistent snapshot];
# 执行操作
rollback;
InnoDB支持事务
其他
自动提交
MySQL有一个系统变量autocommit
,默认开启,如果不显式使用begin
等,开启事务,则每一条语句都是事务
隐式提交
- DDL语言
- 事务控制、锁定语句,开启另一个事务、锁定语句会提交前面的语句
- 加载数据的语句
- MySQL复制的一些语句:
start slave
等 - 其他语句
保存点
使用保持点,可以在进行回滚时,回滚到指定的保持点,savepoint 名字
,rollback 名字
。