事务的特性(AICD)
- 原子性(Atomic): 要么全做完,要么就不做,如果说中途失败了那么之前所有的内容都会无效回滚.
- 隔离性(Isolution): 多个事务之间的语句执行是独立的,不会相互影响.
- 一致性(Consistence): 保证了约束的原则,和现实状态的规则是对应的,比如说唯一性约束、某个金额的值不能为负数、主键约束等等
- 持久性(Durability): 每个操作对数据的更改都需要同步到磁盘中
保证了上述几个特性的数据库操作就叫做事务
事务的状态
- 活动的(Active):事务正在执行过程中
- 部分提交的:事务的最后一个操作执行完成,但是只在内存中执行,并未刷新到磁盘
- 失败的:事务执行中途遇到异常,事务执行失败
- 中止的:失败的事务进行回滚以后就是中止的,也就是之前的操作都失效中止了
- 提交的:事务所有操作执行完成并且更新到磁盘当中,执行成功
事物的语法
1.开启事务:
- begin:该命令代表开启事务,其后的语句除了提交以外所有的语句都属于该事务
- start transaction:和begin的效果一样,但是其后可以跟一些执行选项,比如说READ ONLY(代表该事物是只读的),READ WRITE(该事务是可读可写的),WITH CONSISTENT SNAPSHOT(一致性读)
2.提交事务:
- commit:直接手动提交该命令
- 自动提交事务:set autocommit = ON,设置该属性为ON以后,每一个语句都代表一个事务,执行完即提交一个事务
3.事务支持的引擎:INNODB
4.手动终止事务:事务执行过程使用ROLLBACK命令
5.隐式提交:
- DDL语句:当使用BEGIN开启一个事务以后,之后如果遇到了对表的创建以及结构的修改等语句,都会自动提交该事务
- 隐式使用或者修改数据库当中的表时:比如说ALTER USER会修改数据库当中的USER表,就会触发事务提交
- 当开启另外一个事务的时候,就会提交前一个事务
- 加载数据的时候,比如说LOAD TABLES这些语句,就会触发事务提交
- 一些复制语句,比如说start slave等语句
- ANALYSIZE TABLE等语句
6.保存点:SAVEPOINT,事务执行过程可打点,用于指定回滚位置
- 设置保存点:直接使用SAVEPOINT 保存点名称(SAVEPOINT s1)
- 删除保存点:RELEASE SAVEPOINT 保存点名称
- 回滚到指定保存点:ROLLBACK TO 保存点名称
