TCL : 事务控制语言 (Transaction Control Language)

  • 事务:一组sql语句组成执行单元,这个执行要么执行,要么全部不执行
  • 某条sql语句执行失败或产生错误,整个单元就会回滚,所有的数据将返回到事物开始以前的状态,执行成功,则事务成功顺利执行


事务的(acid) 属性

  • 原子性(Atomicity): 事务时不可在分割的工作单位,事务要么发生,要么都不发生
  • 一致性(Consistency):事务必须是数据库从一个一致性状态变成另一个一致性状态
  • 隔离性(lsolation):事务的隔离性是指一个事务的执行不能被其他事务干扰,即一个事务的内部操作及使用数据对并发的其他事务是隔离的,并且执行的各个事务之间不能相互干扰.
  • 持久性(Durability):一旦提交,则会永久改变数据库的数据

隐式事务:没有明显的开启,结束标记:insert, update ,delete,select

  1. 显示事务:关闭自动提交功能禁用 set autocommit = 0; [start transaction ;]
  2. 一条多条,sql语句
  3. 结束事务:提交事务 : commit ,回滚事务 : rollback

保存点:savepoint a 设置保存点 搭配 rollback to a 回滚到保存点

  1. 显示事务:关闭自动提交功能禁用 set autocommit = 0; start transaction ;
  2. 一条多条,sql语句 ,中间加入保存点 savepoint a
  3. 结束事务:提交事务 : commit ,回滚事务 : rollback
  4. rollback to a


语法
set autocommit =0 ;
start transaction ; //可省略
语句1;语句2;
commit ;

运行多个事务,没有隔离机制们就会导致并发问题.
SELECT @@transaction_isolation

事务的并发问题 : 多个事务 同时操作同一个数据库相同数据时

  • 脏读:一个事务读取了其他事务还没有提交的数据,读取的是其他事务”更新”的数据
  • 不可重复:一个事务多次读取,结果不一样
  • 幻读:一个事务读取其他事务还没有提交的数据,只是读到的是其他事务”插入”的数据

image.png

set session transaction isolation level 隔离级别;