事务的特性(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 保存点名称