事務(wù)是對數(shù)據(jù)庫執(zhí)行的工作單元。事務(wù)是以邏輯順序完成的工作的單位或順序,無論是用戶手動的方式還是通過某種數(shù)據(jù)庫程序自動執(zhí)行。
事務(wù)具有以下四個(gè)標(biāo)準(zhǔn)屬性,一般是由首字母縮寫詞ACID簡稱:
以下命令用于控制事務(wù):
BEGIN TRANSACTION:開始事務(wù)。COMMIT:保存更改,或者您可以使用END TRANSACTION命令。ROLLBACK:回滾更改。事務(wù)控制命令僅用于DML命令INSERT,UPDATE和DELETE。 創(chuàng)建表或刪除它們時(shí)不能使用它們,因?yàn)檫@些操作會在數(shù)據(jù)庫中自動提交。
可以使用BEGIN TRANSACTION或簡單的BEGIN命令來開始事務(wù)。 這樣的事務(wù)通常會持續(xù)下去,直到遇到下一個(gè)COMMIT或ROLLBACK命令。 但如果數(shù)據(jù)庫關(guān)閉或發(fā)生錯(cuò)誤,則事務(wù)也將ROLLBACK。
以下是啟動/開始事務(wù)的簡單語法:
BEGIN;
or
BEGIN TRANSACTION;
COMMIT命令是用于將事務(wù)調(diào)用的更改保存到數(shù)據(jù)庫的事務(wù)命令。COMMIT命令自上次的COMMIT或ROLLBACK命令后將所有事務(wù)保存到數(shù)據(jù)庫。COMMIT命令的語法如下:
COMMIT;
or
END TRANSACTION;
ROLLBACK命令是用于還原尚未保存到數(shù)據(jù)庫的事務(wù)的事務(wù)命令。自上次發(fā)出COMMIT或ROLLBACK命令以來,ROLLBACK命令只能用于撤銷事務(wù)。ROLLBACK命令的語法如下:
ROLLBACK;
考慮COMPANY表有以下記錄:
id | name | age | address | salary
----+-------+-----+-----------+--------
1 | Paul | 32 | California| 20000
2 | Allen | 25 | Texas | 15000
3 | Teddy | 23 | Norway | 20000
4 | Mark | 25 | Rich-Mond | 65000
5 | David | 27 | Texas | 85000
6 | Kim | 22 | South-Hall| 45000
7 | James | 24 | Houston | 10000
現(xiàn)在,我們開始一個(gè)事務(wù),并刪除表中age = 25的記錄,最后使用ROLLBACK命令撤消所有的更改。
yiibai_db=# BEGIN;
DELETE FROM COMPANY WHERE AGE = 25;
ROLLBACK;
如果再次查看COMPANY表應(yīng)該仍然看到以下記錄:
id | name | age | address | salary
----+-------+-----+-----------+--------
1 | Paul | 32 | California| 20000
2 | Allen | 25 | Texas | 15000
3 | Teddy | 23 | Norway | 20000
4 | Mark | 25 | Rich-Mond | 65000
5 | David | 27 | Texas | 85000
6 | Kim | 22 | South-Hall| 45000
7 | James | 24 | Houston | 10000
現(xiàn)在,讓我們開始另一個(gè)事務(wù),并從表中刪除age = 25的記錄,最后使用COMMIT命令提交所有的更改。
yiibai_db=# BEGIN;
DELETE FROM COMPANY WHERE AGE = 25;
COMMIT;
如果查看COMPANY表應(yīng)該看到刪除后剩下的記錄:
id | name | age | address | salary
----+-------+-----+------------+--------
1 | Paul | 32 | California | 20000
3 | Teddy | 23 | Norway | 20000
5 | David | 27 | Texas | 85000
6 | Kim | 22 | South-Hall | 45000
7 | James | 24 | Houston | 10000
(5 rows)