PLSQL

PL / SQL事務

PL / SQL事務

在數據庫中,事務是由一個或多個相關SQL語句組成的原子工作單元。之所以這麼叫,是因為數據庫是由SQL語句修改的,因為這構成了一個可以共同提交的事務,可以使其永久保存到數據庫中,也可以從數據庫中回滾。當SQL語句執行成功且提交的事務不相同時。當SQL語句成功執行時,可以回滾事務,並且可以撤消由語句所做的更改,除非事務被稱為已提交。

開始和結束事務

據說所有的事務都有開始和結束。當發生以下事件之一時,事務開始:

  1. 第一條SQL語句是在連接到數據庫之後執行的。
  2. 在事務完成之後,每一條新的SQL語句都會被發出。

當發生以下事件之一時,事務結束:

  1. 當發出提交或回滾語句時。
  2. 發出DDL語句,如CREATE TABLE語句,因為在這種情況下會自動執行COMMIT。
  3. 像GRANT語句一樣發出DCL語句,因為在這種情況下會自動執行COMMIT。
  4. 當用戶從數據庫斷開連接時。
  5. 當用戶通過發出EXIT命令退出SQL*PLUS時,將自動執行COMMIT。
  6. SQL*Plus異常終止時,自動執行ROLLBACK操作。
  7. 當DML語句失敗時,ROLLBACK(在本例中)將自動執行撤銷該DML語句。

提交事務

當我們發出SQL命令COMMIT時,事務可以變成永久的。

語法:提交;示例:INSERT INTO teachers (ID,NAME,AGE,ADDRESS,SALARY) VALUES (1, 'ranjitha', 34, 'bangalore', 2000.00);INSERT INTO teacher (ID,NAME,AGE,ADDRESS,SALARY) VALUES (2, 'sai', 24, 'hyderabad', 3000.00);INSERT INTO teacher (ID,NAME,AGE,ADDRESS,SALARY) VALUES (3, 'shakthi', 32, 'pune', 4500.00);提交;

回滾事務

可以在沒有COMMIT的情況下對數據庫進行更改,可以使用ROLLBACK命令來撤銷COMMIT。

語法:

ROLLBACK [TO SAVEPOINT < savepoint_name>];

當事務由於某些前所未有的情況(例如係統故障)而中止時,自提交以來的整個事務將自動回滾。如果我們不使用保存點,我們可以使用ROLLBACK語句。

回滾;

保存點

據說,這些製造商通過設置一些檢查點,幫助將一個長交易分割成較小的單元。當我們在長事務中設置這個保存點時,如果需要,我們還可以回滾到檢查點。

語法:SAVEPOINT < savepoint_name>;例如:INSERT INTO teachers (ID,NAME,AGE,ADDRESS,SALARY) VALUES (1, 'ranjitha', 34, 'bangalore', 2000.00);INSERT INTO teacher (ID,NAME,AGE,ADDRESS,SALARY) VALUES (2, 'sai', 24, 'hyderabad', 3000.00);INSERT INTO teacher (ID,NAME,AGE,ADDRESS,SALARY) VALUES (3, 'shakthi', 32, 'pune', 4500.00);保存點sav1;更新教師設定工資=工資+1000;回滾到sav1;更新教師工資=工資+1000,id =2;更新教師工資=工資+1000,id =3;提交;

ROLLBACK to sav1語句回滾到我們標記為sav1的保存點之前的所有更改。在此之後,我們將開始進行所有新的改變。

自動事務控製

為了在執行INSERT、UPDATE或delete命令時自動執行COMMIT,可以設置這個AUTOCOMMIT環境變量。

設置自動提交;

關閉自動提交;

Baidu
map