PostgreSQL - 事務



事務是對資料庫執行的一組工作單元。事務是按邏輯順序完成的工作單元或序列,無論是由使用者手動執行還是由某種資料庫程式自動執行。

事務是對資料庫進行的一項或多項更改的傳播。例如,如果您要建立記錄、更新記錄或從表中刪除記錄,那麼您就是在對錶執行事務。控制事務以確保資料完整性和處理資料庫錯誤非常重要。

實際上,您會將許多 PostgreSQL 查詢組合成一個組,並將它們全部一起執行作為事務的一部分。

事務的屬性

事務具有以下四個標準屬性,通常用首字母縮略詞 ACID 來表示:

  • 原子性 - 確保工作單元中的所有操作都成功完成;否則,事務在發生故障時中止,並將之前的操作回滾到其以前的狀態。

  • 一致性 - 確保資料庫在成功提交事務後正確更改狀態。

  • 隔離性 - 使事務能夠獨立於彼此並對彼此透明地執行。

  • 永續性 - 確保已提交事務的結果或效果在系統發生故障時仍然存在。

事務控制

以下命令用於控制事務:

  • BEGIN TRANSACTION - 啟動事務。

  • COMMIT - 儲存更改,或者您可以使用END TRANSACTION命令。

  • ROLLBACK - 回滾更改。

事務控制命令僅與 DML 命令 INSERT、UPDATE 和 DELETE 一起使用。在建立或刪除表時不能使用它們,因為這些操作會自動提交到資料庫。

BEGIN TRANSACTION 命令

可以使用 BEGIN TRANSACTION 或簡單的 BEGIN 命令啟動事務。此類事務通常持續到遇到下一個 COMMIT 或 ROLLBACK 命令為止。但是,如果資料庫關閉或發生錯誤,事務也將回滾。

以下是啟動事務的簡單語法:

BEGIN;

or

BEGIN TRANSACTION;

COMMIT 命令

COMMIT 命令是用於將事務呼叫的更改儲存到資料庫的事務命令。

COMMIT 命令將自上次 COMMIT 或 ROLLBACK 命令以來的所有事務儲存到資料庫。

COMMIT 命令的語法如下:

COMMIT;

or

END TRANSACTION;

ROLLBACK 命令

ROLLBACK 命令是用於撤消尚未儲存到資料庫的事務的事務命令。

ROLLBACK 命令只能用於撤消自發出上次 COMMIT 或 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

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

testdb=# 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

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

testdb=# 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)
廣告

© . All rights reserved.