位置:首頁 > 數據庫 > PostgreSQL教學 > PostgreSQL事務

PostgreSQL事務

事務是一個工作單元,對數據庫執行。事務是在一個邏輯順序,無論是由用戶手動或某種數據庫程序自動完成的工作單位或序列。

事務是指一個或多個更改數據庫的傳播。例如,如果正在創建一個記錄或更新記錄從表中刪除一條記錄,那麼正在執行的事務放在表中。重要的是要控製事務,以確保數據的完整性和處理數據庫錯誤。

實際上,可以使用多台PostgreSQL查詢成一組,執行所有這些放在一起作為一個事務的一部分。

事務的屬性:

事務具有以下四個標準屬性的縮寫ACID,通常被稱為:

  • 原子性: 確保工作單位內的所有操作都成功完成,否則,該事務所被中止在故障點,和以前的操作將回滾到以前的狀態。

  • 一致性: 確保數據庫正確地改變狀態後成功提交的事務。

  • 隔離性: 使交易操作相互獨立的和透明的。

  • 持久性: 確保已提交事務的結果或效果在係統發生故障的情況下仍然存在。

事務控製:

使用下麵的命令來控製事務:

  • BEGIN TRANSACTION: 開始事務.

  • COMMIT: 保存更改,或者可以使用END TRANSACTION命令.

  • ROLLBACK: 回滾事務。

事務控製命令隻用來與DML命令INSERT,UPDATE和DELETE。他們不能使用創建表時或刪除,因為這些操作在數據庫中被自動提交.

BEGIN TRANSACTION 命令

事務可以啟動或簡單BEGIN...BEGIN TRANSACTION命令。事務通常會繼續下去,直到遇到下一個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

現在,讓我們開始一個事務,並從表中刪除記錄age= 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

現在,從表開始另一個事務和刪除記錄age= 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)