总共只有5个事务控制语句:commit、savepoint、rollback、set transaction、set constraints。

创建表:

CREATE TABLE TB_USER
(
    ID INTEGER PRIMARY KEY,
    USER_NAME VARCHAR2(20) NOT NULL,
    USER_AGE INTEGER NOT NULL
);

CREATE SEQUENCE SEQ_USER
INCREMENT BY 1
START WITH 1
NOMAXVALUE
NOCYCLE
CACHE 10;

CREATE OR REPLACE TRIGGER TR_USER BEFORE INSERT ON TB_USER FOR EACH ROW
BEGIN
    SELECT SEQ_USER.NEXTVAL INTO :NEW.ID FROM DUAL;
END;


测试


SQL> SELECT * FROM TB_USER;

未选定行

SQL> INSERT INTO TB_USER(USER_NAME, USER_AGE) VALUES ('user1', 21);

已创建 1 行。

SQL> SELECT * FROM TB_USER;

        ID USER_NAME              USER_AGE
---------- -------------------- ----------
       628 user1                        21

SQL> SAVEPOINT P1;

保存点已创建。

SQL> INSERT INTO TB_USER(USER_NAME, USER_AGE) VALUES ('user2', 22);

已创建 1 行。

SQL> SELECT * FROM TB_USER;

        ID USER_NAME              USER_AGE
---------- -------------------- ----------
       628 user1                        21
       629 user2                        22

SQL> ROLLBACK TO SAVEPOINT P1;

回退已完成。

SQL> SELECT * FROM TB_USER;

        ID USER_NAME              USER_AGE
---------- -------------------- ----------
       628 user1                        21

SQL> INSERT INTO TB_USER(USER_NAME, USER_AGE) VALUES ('user3', 23);

已创建 1 行。

SQL> SELECT * FROM TB_USER;

        ID USER_NAME              USER_AGE
---------- -------------------- ----------
       628 user1                        21
       630 user3                        23

SQL> SAVEPOINT P2;

保存点已创建。

SQL> COMMIT;

提交完成。

SQL> ROLLBACK TO SAVEPOINT P2;
ROLLBACK TO SAVEPOINT P2
*
第 1 行出现错误:
ORA-01086: 从未创建保存点 'P2'


SQL>



可以看到COMMIT之后,SAVEPOINT就没有了。