PostgreSQL事務

事務是對數據庫執行的工作單元。事務是以邏輯順序完成的工作的單位或順序,無論是用戶手動的方式還是通過某種數據庫程序自動執行。

事務性質

事務具有以下四個標準屬性,一般是由首字母縮寫詞ACID簡稱:

  • **原子性(Atomicity)**:確保工作單位內的所有操作成功完成; 否則事務將在故障點中止,以前的操作回滾到其以前的狀態。
  • **一致性(Consistency)**:確保數據庫在成功提交的事務時正確更改狀態。
  • **隔離性(Isolation)**:使事務能夠獨立運作並相互透明。
  • **持久性(Durability)**:確保在系統發生故障的情況下,提交的事務的結果或效果仍然存在。

事務控制

以下命令用於控制事務:

  • BEGIN TRANSACTION:開始事務。
  • COMMIT:保存更改,或者您可以使用END TRANSACTION命令。
  • ROLLBACK:回滾更改。

事務控制命令僅用於DML命令INSERTUPDATEDELETE。 創建表或刪除它們時不能使用它們,因爲這些操作會在數據庫中自動提交。

BEGIN TRANSACTION命令:

可以使用BEGIN TRANSACTION或簡單的BEGIN命令來開始事務。 這樣的事務通常會持續下去,直到遇到下一個COMMITROLLBACK命令。 但如果數據庫關閉或發生錯誤,則事務也將ROLLBACK

以下是啓動/開始事務的簡單語法:

BEGIN;

or

BEGIN TRANSACTION;

COMMIT命令

COMMIT命令是用於將事務調用的更改保存到數據庫的事務命令。
COMMIT命令自上次的COMMITROLLBACK命令後將所有事務保存到數據庫。
COMMIT命令的語法如下:

COMMIT;

or

END TRANSACTION;

ROLLBACK命令

ROLLBACK命令是用於還原尚未保存到數據庫的事務的事務命令。自上次發出COMMITROLLBACK命令以來,ROLLBACK命令只能用於撤銷事務。
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

現在,我們開始一個事務,並刪除表中age = 25的記錄,最後使用ROLLBACK命令撤消所有的更改。

yiibai_db=# BEGIN;
DELETE FROM COMPANY WHERE AGE = 25;
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

現在,讓我們開始另一個事務,並從表中刪除age = 25的記錄,最後使用COMMIT命令提交所有的更改。

yiibai_db=# BEGIN;
DELETE FROM COMPANY WHERE AGE = 25;
COMMIT;

如果查看COMPANY表應該看到刪除後剩下的記錄:

 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)