在本章中,我們將討論和學(xué)習(xí)PL/SQL中的事務(wù)。 數(shù)據(jù)庫事務(wù)是由一個(gè)或多個(gè)相關(guān)SQL語句組成的原子工作單元。它被稱為原子操作,因?yàn)闃?gòu)成事務(wù)的SQL語句帶來的數(shù)據(jù)庫修改可以共同提交,即永久化到數(shù)據(jù)庫或從數(shù)據(jù)庫回滾(撤銷)。
成功執(zhí)行的SQL語句和提交的事務(wù)不一樣。即使成功執(zhí)行SQL語句,除非提交包含語句的事務(wù),否則可以回滾該語句,并且可以撤消語句所做的所有更改。
事務(wù)有開始和結(jié)束。當(dāng)發(fā)生以下事件之一時(shí),事務(wù)即開始 -
事務(wù)在下列事件之一發(fā)生時(shí)結(jié)束 -
通過發(fā)出SQL命令COMMIT將事務(wù)永久化。COMMIT命令的一般語法是 -
COMMIT;
SQL
例如,
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;
SQL
使用ROLLBACK命令可以撤銷對(duì)不帶COMMIT的數(shù)據(jù)庫所做的更改。
ROLLBACK命令的一般語法是 -
ROLLBACK [TO SAVEPOINT < savepoint_name>];
SQL
當(dāng)事務(wù)由于某種前所未有的情況而中止,如系統(tǒng)故障時(shí),自提交以來整個(gè)事務(wù)被自動(dòng)回滾。 如果不使用保存點(diǎn)(savepoint),那么只需使用以下語句來回滾所有更改。
ROLLBACK;
SQL
保存點(diǎn)(Savepoints)是有助于通過設(shè)置一些檢查點(diǎn)將長事務(wù)拆分成更小的單元的標(biāo)記。通過在長事務(wù)中設(shè)置保存點(diǎn),如果需要,可以回滾到檢查點(diǎn)。這是通過發(fā)出SAVEPOINT命令完成的。
SAVEPOINT命令的一般語法是 -
SAVEPOINT < savepoint_name >;
SQL
例如,
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;
SQL
ROLLBACK TO sav1 - 此語句回滾直到保存點(diǎn)sav1的所有更改。
之后,所做新的改變將重新開始。
要在執(zhí)行INSERT,UPDATE或DELETE命令時(shí)自動(dòng)執(zhí)行COMMIT,可以將AUTOCOMMIT環(huán)境變量設(shè)置為 -
SET AUTOCOMMIT ON;
SQL
也可以使用以下命令關(guān)閉事務(wù)自動(dòng)提交模式 -
SET AUTOCOMMIT OFF;
更多建議: