原子语句是或者完全执行,或者根本不执行的语句。例如,更新数千行的 UPDATE 语句在更新许多行后可能会遇到错误。如果该语句没有完成,则所有更改的行都恢复为其初始状态。UPDATE 语句即是原子语句。
所有非复合 SQL 语句都是原子语句。可以通过在 BEGIN 关键字后添加 ATOMIC 关键字来使复合语句成为原子语句。
BEGIN ATOMIC UPDATE Employees SET ManagerID = 501 WHERE EmployeeID = 467; UPDATE Employees SET BirthDate = 'bad_data'; END |
在此示例中,两个更新语句都属于原子复合语句。它们要么成功,要么失败,二者只能居其一。第一个更新语句将是成功的。第二个语句会引发数据转换错误,因为指派给 BirthDate 列的值无法转换为日期。
该原子复合语句会失败,因此两个 UPDATE 语句的结果都会被撤消。即使当前执行的事务最终被提交,原子复合语句中的这两个语句也都不会生效。
如果原子复合语句成功,则在复合语句中进行的更改直到当前执行的事务被提交的时候才会生效。如果原子复合语句成功而包含该语句的事务却回退,则原子复合语句也回退。在原子复合语句开始时建立一个保存点。语句中的任何错误都会导致回退到该保存点。
在自动提交(非链接)模式下执行原子复合语句时,直到完成语句执行后提交模式才变为到手动(链接)。在手动模式中,在原子复合语句中执行的 DML 语句不会引起快速 COMMIT 或 ROLLBACK。如果原子复合语句成功完成,将执行 COMMIT 语句;否则执行 ROLLBACK 语句。
在原子复合语句中不能使用 COMMIT 和 ROLLBACK 以及某些 ROLLBACK TO SAVEPOINT 语句。
![]() |
使用DocCommentXchange讨论此页。
|
版权 © 2013, SAP 股份公司或其关联公司. - SAP Sybase SQL Anywhere 16.0 |