TCL语言(transaction control language)–事务管理
事务
- 事务:一个或者一组sql语句组成一个执行单元,该单元全部执行或者全部不执行
- 事务的ACID属性:
- 原子性(atomicity):不可分割的工作单位,要么都执行,要么都不执行
- 一致性(consistency):必须使数据库从一个一致性状态转化到另一个一致性状态
- 隔离性(isolation):一个事务的执行不受另外的事物的影响
- 持久性(durability):事务一旦提交执行,对数据的影响是持久性的
- 事务分类:
- 隐式事务:事务没有明显的开始结束标记(delete,update,insert)
- 显式事务:事务具有明显的开始结束标记
前提:必须首先禁用自动提交功能- 语法步骤
步骤1:开启事务
set autocommit=0; #设置自动提交功能禁用
start transaction;
步骤2:编写事务中的sql语句(只是增删改查语句)
语句1;
语句2;
…
步骤3:结束事务
commit; #提交事务
rollback; #回滚事务5.事务的隔离级别:
脏读 不可重复读 幻读
read uncommitted 可 可 可
read committed 不可 可 可
repeatable read 不可 不可 可
serializable 不可 不可 不可
Mysql 中默认第三个级别
查看隔离级别:select @@tx_isolation;
设置隔离级别:set session transaction isolation level 隔离级别;
6.设置保存点: savepoint 断点名;7.在事务中,delete语句支持回滚,但是truncate不支持回滚
USE test; DROP TABLE IF EXISTS account; CREATE TABLE account( id INT PRIMARY KEY AUTO_INCREMENT, username VARCHAR(20), balance DOUBLE ); INSERT INTO account(username,balance) VALUES('john',1000),('lily',1000); SELECT * FROM account; -------------------------------------使用事务------------------------------------------- ## 启用事务 SET autocommit=0; START TRANSACTION; ## 事务中的SQL语句 UPDATE account SET balance=1000 WHERE username='john'; UPDATE account SET balance=1000 WHERE username='lily'; ## 结束事务的两种方式 ROLLBACK; #commit; -------------------------------------事务中设置保存点----------------------------------- ## 设置保存点,与回滚语句搭配使用 SET autocommit=0; START TRANSACTION; SELECT * FROM account; DELETE FROM account WHERE id=1; SAVEPOINT a; DELETE FROM account WHERE id=4; ROLLBACK TO a;