TCL(会话控制)
TCL
TCL (Transaction Control Language) 是用于控制事务的语言,包括提交 (commit)、回滚 (rollback) 和保存点 (savepoint)。
概述
COMMIT: 将所有的事务更改永久保存到数据库中,结束当前事务。 ROLLBACK: 撤销当前事务的所有更改,回滚到事务开始之前的状态。 SAVEPOINT: 为当前事务创建一个保存点,可以在事务执行过程中使用 ROLLBACK 回滚到指定的保存点。 RELEASE SAVEPOINT: 删除事务中指定的保存点,释放相关的数据库资源。 SET TRANSACTION: 设置事务的隔离级别和事务的读写特性。
|
TCL一般与DML语句配合使用。
事务:一个事务是一组SQL语句。
“事务”格式如下:
BEGIN TRANSACTION;
COMMIT;
|
COMMIT(提交)
COMMIT;
COMMIT WORK: 默认选项,表示提交当前事务并释放锁定资源。与基本的COMMIT语句相同。 COMMIT TRANSACTION: 与COMMIT WORK相同,也是默认选项。表示提交当前事务并释放锁定资源。
COMMIT AND CHAIN: 提交当前事务并立即启动一个新的事务,使新的事务成为当前事务。 COMMIT AND NO CHAIN: 提交当前事务并不立即启动一个新的事务。这是默认选项。 COMMIT RETAIN LOCKS: 提交当前事务,但保留当前事务所获取的所有锁定资源。
|
ROLLBACK(撤销与回滚)
用于撤销未提交的事务或回滚已经提交的事务。
注: COMMIT 后不能被撤销操作修改,也就是撤销不了已经提交保存到数据的修改。
BEGIN TRANSACTION;
ROLLBACK;
BEGIN TRANSACTION;
SAVEPOINT my_savepoint;
ROLLBACK TO SAVEPOINT my_savepoint;
|
SAVEPOINT(保存点)
用于创建一个保存点。上面在撤销时可以直接撤销到保存点而不是撤销整个修改的操作。
注:当整个事务COMMIT后,所有的 SAVEPOINT 都会失效!(不能回滚的原因)
SAVEPOINT savepoint_name;
|
RELEASE SAVEPOINT(删保存节点)
如果指定的保存点名称存在,则该命令将删除保存点,并释放由保存点所占用的所有相关资源。
如果指定的保存点名称不存在就报错。
RELEASE SAVEPOINT savepoint_name;
|
SET TRANSACTION(隔离级别)
用于设置事务的隔离级别和其他选项。
ISOLATION LEVEL:用于设置事务的隔离级别。 READ UNCOMMITTED 读未提交 READ COMMITTED 已提交读 REPEATABLE READ 可重复读取 SERIALIZABLE 可序列化 默认的隔离级别是数据库的默认隔离级别。
==> 在 MySQL 中,默认隔离级别是 Repeatable Read(可重复读); 在 PostgreSQL 中,默认隔离级别是 Read Committed(已提交读); 在 Oracle 中,默认隔离级别是 Read Committed(已提交读) eg:
SET TRANSACTION ISOLATION LEVEL READ COMMITTED READ WRITE;
READ ONLY / READ WRITE:用于设置事务的读写性质。 READ ONLY 则事务只能进行读取操作; READ WRITE 则事务可以进行读取和写入操作(默认)。 eg:
SET TRANSACTION READ ONLY NOT DEFERRABLE;
DEFERRABLE / NOT DEFERRABLE:用于设置事务的延迟性质。 DEFERRABLE 事务可以延迟提交,直到其他事务完成。 NOT DEFERRABLE 事务必须立即提交(默认)。 eg:
SET TRANSACTION READ WRITE DEFERRABLE;
|