目录
数据库事务是由一个或多个相关SQL语句组成的原子工作单元。它被称为原子操作,因为构成事务的SQL语句带来的数据库修改可以共同提交,即永久化到数据库或从数据库回滚(撤销)。成功执行的SQL语句和提交的事务不一样,即使成功执行SQL语句,除非提交包含语句的事务,否则可以回滚该语句,并且可以撤消语句所做的所有更改。
当发生下列事件之一时,事务即开始:
当发生下列事件之一时,事务即结束:
通过发出SQL命令COMMIT将事务永久化。COMMIT命令的一般语法是:
COMMIT;
例如:
- INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
- VALUES (6, 'Komal', 22, 'MP', 4500.00 );
-
- COMMIT;
使用ROLLBACK命令可以撤销对不带COMMIT的数据库所做的更改。ROLLBACK命令的一般语法是:
ROLLBACK [TO SAVEPOINT
];
当事务由于某种前所未有的情况而中止,如系统故障时,自提交以来整个事务被自动回滚。如果不使用保存点(savepoint),那么只需使用以下语句来回滚所有更改。
ROLLBACK;
保存点(Savepoints)
保存点(Savepoints)是有助于通过设置一些检查点将长事务拆分成更小的单元的标记。通过在长事务中设置保存点,如果需要,可以回滚到检查点。这是通过发出SAVEPOINT命令完成的。SAVEPOINT命令的一般语法是:
SAVEPOINT
;
例如:
- INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
- VALUES (7, 'Rajnish', 27, 'HP', 9500.00 );
-
- INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
- VALUES (8, 'Riddhi', 21, 'WB', 4500.00 );
-
- SAVEPOINT sav1; -- 设置保存点
-
- UPDATE CUSTOMERS
- SET SALARY = SALARY + 1000;
-
- ROLLBACK TO sav1; -- 此语句回滚直到保存点sav1的所有更改。之后,所做新的改变将重新开始。
-
- UPDATE CUSTOMERS
- SET SALARY = SALARY + 1000
- WHERE ID = 7;
-
- UPDATE CUSTOMERS
- SET SALARY = SALARY + 1000
- WHERE ID = 8;
-
- COMMIT;
要在执行INSERT,UPDATE或DELETE命令时自动执行COMMIT,可以将AUTOCOMMIT环境变量设置为自动提交,如:
SET AUTOCOMMIT ON;
也可以使用以下命令关闭事务自动提交模式:
SET AUTOCOMMIT OFF;