TCL(事务控制语言)
📄字数 1.7K
👁️阅读量 加载中...
事务控制语言(Transaction Control Language,简称 TCL)是 SQL 的一个重要子集,专门用于管理数据库事务 —— 即由多个操作组成的、需作为原子单元执行的逻辑工作单元。
借助 TCL 命令,能够严格保证一组数据库操作的执行结果具有 “全部成功或全部失败” 的特性:要么所有操作全部提交并永久生效,要么在发生错误时全部回滚至初始状态,以此确保事务满足 ACID 特性(原子性、一致性、隔离性、持久性),是维护数据库数据完整性和一致性的核心工具。
一、启动事务
开始事务标志着一个事务的开始,在此之后执行的所有SQL语句都将成为该事务的一部分,直到事务被提交或回滚。
1.1 语法格式
1.2 参数说明
BEGIN
或START
:表示一个事务的开始。opt_trans
:可选关键字,用来更清晰地表达“启动事务”。以下四条命令等效:BEGIN
BEGIN WORK
BEGIN TRAN
BEGIN TRANSACTION
二、提交事务
提交事务用于将当前事务的所有修改永久保存到数据库,并释放事务持有的所有锁与结束当前事务。
2.1 语法格式
2.2 参数说明
COMMIT
:提交事务。opt_trans
:可选关键字,用来强调“提交事务”。以下四条命令等效:COMMIT
COMMIT WORK
COMMIT TRAN
COMMIT TRANSACTION
三、回滚事务
回滚事务用于撤销当前事务的所有修改,并回滚到事务开始前的状态与释放事务持有的锁。
3.1 语法格式
3.2 参数说明
ROLLBACK
或ABORT
:功能完全等效,均会终止当前事务并回滚所有未提交的修改。TO SAVEPOINT <名称>
:回滚到指定保存点。opt_trans
:可选关键字,用来强调“回滚事务”。以下四条命令等效:ROLLBACK
ROLLBACK WORK
ROLLBACK TRAN
ROLLBACK TRANSACTION
四、保存点
保存点用于在事务内部创建回滚标记点,且允许部分回滚而非整个事务。
4.1 语法格式
设置保存点
删除保存点
4.2 参数说明
SAVEPOINT <名称>
:在当前事务中创建一个保存点。RELEASE SAVEPOINT <名称>
:删除指定的保存点。
提示
保存点作用范围只限于当前连接,如果想要回退到某一个保存点,需在提交事务之前。
五、示例
sql
-- 创建测试表
SQL> CREATE TABLE tb_test(id INT PRIMARY KEY, val VARCHAR);
-- 开启事务
SQL> BEGIN TRANSACTION;
-- 填充测试数据
SQL> INSERT INTO tb_test VALUES(1, 'aaa');
SQL> INSERT INTO tb_test VALUES(2, 'bbb');
-- 提交事务
SQL> COMMIT;
-- 验证测试表数据
SQL> SELECT * from tb_test;
+----+-----+
| ID | VAL |
+----+-----+
| 1 | aaa |
| 2 | bbb |
+----+-----+
-- 开启事务
SQL> START TRANSACTION;
-- 填充测试数据
SQL> INSERT INTO tb_test VALUES(3, 'ccc');
SQL> INSERT INTO tb_test VALUES(4, 'ddd');
-- 回滚事务
SQL> ROLLBACK;
-- 验证测试表数据
SQL> SELECT * from tb_test;
+----+-----+
| ID | VAL |
+----+-----+
| 1 | aaa |
| 2 | bbb |
+----+-----+
-- 开启事务
SQL> BEGIN;
-- 填充测试数据
SQL> INSERT INTO tb_test VALUES(3, 'ccc');
SQL> INSERT INTO tb_test VALUES(4, 'ddd');
-- 设置保存点S1
SQL> SAVEPOINT S1;
-- 填充测试数据
SQL> INSERT INTO tb_test VALUES(5, 'eee');
SQL> INSERT INTO tb_test VALUES(6, 'fff');
-- 回退到保存点S1
SQL> ROLLBACK TO S1;
-- 提交事务
SQL> COMMIT;
-- 验证测试表数据
SQL> SELECT * from tb_test;
+----+-----+
| ID | VAL |
+----+-----+
| 1 | aaa |
| 2 | bbb |
| 3 | ccc |
| 4 | ddd |
+----+-----+