- PostgreSQL 教程
- PostgreSQL - 首頁
- PostgreSQL - 概述
- PostgreSQL - 環境設定
- PostgreSQL - 語法
- PostgreSQL - 資料型別
- PostgreSQL - 建立資料庫
- PostgreSQL - 選擇資料庫
- PostgreSQL - 刪除資料庫
- PostgreSQL - 建立表
- PostgreSQL - 刪除表
- PostgreSQL - 模式
- PostgreSQL - 插入查詢
- PostgreSQL - 選擇查詢
- PostgreSQL - 運算子
- PostgreSQL - 表示式
- PostgreSQL - WHERE 子句
- PostgreSQL - AND & OR 子句
- PostgreSQL - 更新查詢
- PostgreSQL - 刪除查詢
- PostgreSQL - LIKE 子句
- PostgreSQL - LIMIT 子句
- PostgreSQL - ORDER BY 子句
- PostgreSQL - GROUP BY
- PostgreSQL - WITH 子句
- PostgreSQL - HAVING 子句
- PostgreSQL - DISTINCT 關鍵字
- 高階 PostgreSQL
- PostgreSQL - 約束
- PostgreSQL - 連線
- PostgreSQL - UNION 子句
- PostgreSQL - NULL 值
- PostgreSQL - 別名語法
- PostgreSQL - 觸發器
- PostgreSQL - 索引
- PostgreSQL - ALTER TABLE 命令
- TRUNCATE TABLE 命令
- PostgreSQL - 檢視
- PostgreSQL - 事務
- PostgreSQL - 鎖
- PostgreSQL - 子查詢
- PostgreSQL - 自動遞增
- PostgreSQL - 許可權
- 日期/時間函式 & 運算子
- PostgreSQL - 函式
- PostgreSQL - 有用函式
- PostgreSQL 介面
- PostgreSQL - C/C++
- PostgreSQL - Java
- PostgreSQL - PHP
- PostgreSQL - Perl
- PostgreSQL - Python
- PostgreSQL 有用資源
- PostgreSQL - 快速指南
- PostgreSQL - 有用資源
- PostgreSQL - 討論
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)