My SQL事务控制语言(TCL)

来源:互联网 发布:电脑桌面知乎 编辑:程序博客网 时间:2024/06/07 01:15

1、什么是事务?

事务(Transaction)是由一系列相关的SQL语句组成的最小逻辑工作单元,在程序更新数据库时事务事关重要,因为必须维护数据的完整性。事务由数据操作语言完成,是对数据库所做的一个或多个修改。

事务的特征:
所有的事务都有开始和结束;
事务可以被保存或撤销;
如果事务在中途失败,事务中的任何部分都不会被记录到数据库。

2、事务控制是指对关系型数据库管理系统(RDBMS)里可能发生的各种事务的管理能力。

当一个事务执行并完成修改时,并不是对目标表立即进行修改,此时修改的结果只是保存到临时缓存中,只有利用事务控制命令才最终认可这个事务。

控制事务的命令有3个:
COMMIT;
ROLLBACK;
SAVEPOINT.

2.1 COMMIT命令
COMMIT 命令用于把事务所做的修改保存到数据库,表面该事务对数据库所做的操作将永久记录到数据库。

如:删除表里所有价格低于$14的产品

DELETE FROM PRODUCT_TMP WHERE cost < 14;
使用COMMIT语句把修改保存到数据库,完成这个事务
COMMIT;

2.2 ROLLBACK 命令
ROLLBACK 命令用于撤销还没有被保存到(未提交的事务)数据库的命令,它只能用于撤销上一个COMMIT或ROLLBACK命令之后的事务。

2.3 SAVEPOINT命令
保存点是事务过程中的一个逻辑点,我们可以把事务回退到这个点,而不必回退整个事务。

SAVEPOINT savepoint_name; # 在事务语句中间创建一个保存点。

2.4 ROLLBACK TO SAVEPOINT命令
回退到保存点的命令:

ROLLBACK TO SAVEPOINT_NAME;

RELEASE SAVEPOINT 命令用于删除创建的保存点,在某个保存点被释放之后,就不能再利用ROLLBACK命令来撤销这个保存点之后的事务操作了。

例:对scott.emp表综合使用COMMIT、ROLLBACK和SAVEPOINT示例。
(1)更新scott.emp表中的sal字段,然后执行ROLLBACK操作。

UPDATE scott.emp SET sal=sal*2;
已更新。
ROLLBACK;
回退已完成。(表示UPDATE语句并没有执行)

(2)更新scott.emp表中的sal字段,然后执行COMMIT操作。

UPDATE scott.emp SET sal=sal*2;
已更新。
COMMIT;
提交完成。 (表示UPDATE真正提交到数据库)

(3)向表中插入员工编号为1111的记录,设置一个保存点,然后用UPDATE命令将该记录的员工姓名修改为李明,然后用ROLLBACK命令回滚到保存点。

INSERT INTO scott.emp(empno) VALUES (1111);
已插入一行。
SAVEPOINT p1; #设置保存点p1
UPDATE scott.emp SET ename=”李明” WHERE empno=1111;
ROLLBACK TO p1;
回退已完成。

2.5 事务控制与数据库性能
当出现COMMIT命令时,回退事务信息被写入到目标表里,临时存储区域里的回退信息被清除;
当出现ROLLBACK命令时,修改不会作用于数据库,而临时存储区域里的回退信息被清除;
如果一直没有出现COMMIT 或 ROLLBACK 命令,临时存储区域里的回退信息就会不断增长,直至没有剩余空间,导致数据库停止全部进程,直至空间被释放。

0 0
原创粉丝点击