数据库事务是一个工作的原子单元,其可以由一个或多个相关的SQL语句组成。所谓的原子性就是数据库的修改所带来的构成事务的SQL语句可以集体被提交,即永久到数据库或从数据库中(撤消)回滚。
一个成功执行的SQL语句和提交的事务不一样。即使一个SQL语句执行成功,除非包含该语句的事务被提交,但也可以回滚和声明(S)的所有更改可以撤消。
事务都有开始和结束。事务开始时有下列事件之一:
连接到数据库后执行的第一个SQL语句。
在事务完成之后发出每一个新的SQL语句完成。
事务结束时的下列事件之一发生:
COMMIT或发出ROLLBACK语句。
DDL语句,如CREATE TABLE语句,则发出;因为在这种情况下,COMMIT被自动执行。
一个DCL语句,比如一个GRANT语句发出; 因为在这种情况下,COMMIT被自动执行。
用户从数据库断开。
从SQL* PLUS用户退出通过发出EXIT指令,COMMIT自动执行。
SQL* Plus异常终止,自动执行ROLLBACK。
一个DML语句失败; 在这种情况下自动执行撤消DML语句ROLLBACK。
事务是通过发出SQL命令COMMIT永久生效。COMMIT命令的一般语法是:
COMMIT; |
INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) |
VALUES (1, 'Ramesh', 32, 'Ahmedabad', 2000.00 ); |
INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) |
VALUES (2, 'Khilan', 25, 'Delhi', 1500.00 ); |
INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) |
VALUES (3, 'kaushik', 23, 'Kota', 2000.00 ); |
INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) |
VALUES (4, 'Chaitali', 25, 'Mumbai', 6500.00 ); |
INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) |
VALUES (5, 'Hardik', 27, 'Bhopal', 8500.00 ); |
INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) |
VALUES (6, 'Komal', 22, 'MP', 4500.00 ); |
COMMIT; |
对数据库所做的不提交更改可以使用ROLLBACK命令撤消。
ROLLBACK命令的一般语法是:
ROLLBACK [TO SAVEPOINT < saveweb3_name>]; |
ROLLBACK; |
保存点是某种标志,帮助分裂一个长事务分成更小的单位设置了一些检查点。由一个长事务中设置保存点,可以根据需要回滚到一个检查点。这是通过发出SAVEPOINT命令来完成。
保存点命令的一般语法是:
SAVEPOINT < saveweb3_name >; |
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; |
UPDATE CUSTOMERS |
SET SALARY = SALARY + 1000 |
WHERE ID = 7; |
UPDATE CUSTOMERS |
SET SALARY = SALARY + 1000 |
WHERE ID = 8; |
COMMIT; |
要执行一个自动COMMIT在每一个INSERT,UPDATE或DELETE命令执行时,可以设置AUTOCOMMIT环境变量:
SET AUTOCOMMIT ON; |
SET AUTOCOMMIT OFF; |