PostgreSQL:事務
ACID
-
A(Atomicity)—原子性:整個資料庫事務是不可分割的工作單位。只有使事務中所有的資料庫操作都執行成功,才算整個事務成功。事務中任何一個 SQL 語句執行失敗,已經執行成功的 SQL 語句也必須回滾,退回到執行事務前的狀態。
-
C(Consistency)—一致性:將資料庫從一種狀態轉變為下一種一致的狀態。在事務開始之前和事務結束以後,資料庫的完整性約束沒有被破壞。
-
I(Isolation)—隔離性:每個讀寫事務的物件對其他事務的操作物件能相互分離,即該事務提交前對其他事務都不可見。
-
D(Durability)—永續性:事務一旦提交,其結果就是永久性的。即使發生當機等故障,資料庫也能將資料恢復。
DDL 事務
大多數 DDL 可以包含在一個事務中,而且也是可以回滾的。因此非常適合把 PostgreSQL 作為 Sharding 的分散式資料庫系統。在 Sharding 中,常常需要在多個節點中建相同的表,這是可以把建表語句放在同一個事務中。
AUTOCOMMIT
-
關閉自動提交
\set AUTOCOMMIT off \echo :AUTOCOMMIT
-
事務
begi
語句
-
begin:啟動一個事務
-
savepoint [savepoint_name]:儲存一個儲存點,此處可以進行命名,可以用於回滾提交類操作。
-
COMMIT: 儲存更改,或者可以使用END TRANSACTION命令
-
ROLLBACK: 回滾事務
-
rollback to SAVEPOINT [savepoint_name]:回滾到某個儲存點
兩階段提交
多臺資料庫之間的原子性,需要透過兩階段提交來實現,有如下五個步驟:
-
應用程式先呼叫各臺資料庫做一些操作,但不提交事務;然後呼叫事務協調器中的提交方法。
-
事務協調器將聯絡事務中涉及的沒臺資料庫,並通知它們準備提交事務,這是第一個階段的開始。在 PostgreSQL 一般是呼叫“PREPARE TRANSACTION”命令。
-
各臺資料庫接收到“PREPARE TRANSACTION”命令後,如果要返回成功,則資料庫必須將自己置於一下狀態:確保後續能在被要求提交事物時提交事務,或者在被要求回滾事務時能回滾事務。所以 PostgreSQL 會將已準備好提交的資訊寫入持久儲存區中。如果資料庫無法完成此事務,它會直接返回失敗給事務協調器。
-
事務協調器接收到所有資料庫的響應。
-
在第二階段,如果任一資料庫在第一階段返回失敗,則事務協調器將會發一個回滾命令(ROLLBACK PREPARED)給各臺資料庫。如果所有資料庫的響應都是成功的,則向各臺資料庫傳送“COMMIT PREPARED”命令,通知各臺資料庫事務成功。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31490526/viewspace-2742206/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- PostgreSQL事務隔離級別SQL
- Oracle vs PostgreSQL,研發注意事項(6)- 事務處理OracleSQL
- PostgreSQL DBA(27) - MVCC#7(避免長事務)SQLMVCC#
- Oracle vs PostgreSQL,研發注意事項(2)-DDL語句與事務OracleSQL
- PostgreSQL 原始碼解讀(225)- Transaction(子事務處理)SQL原始碼
- Oracle vs PostgreSQL,研發注意事項(3)- 事務回滾之UPDATE操作解析OracleSQL
- PostgreSQL 原始碼解讀(119)- MVCC#4(啟動事務)SQL原始碼MVCC#
- PostgreSQL 原始碼解讀(228)- Transaction(事務系統簡介)SQL原始碼
- 深入解析 PostgreSQL 系列之併發控制與事務機制SQL
- PostgreSQL DBA(23) - MVCC#3(事務快照和隔離級別)SQLMVCC#
- 事務可見性的判斷和事務隔離級別,PostgreSQL和MySQL實現上有啥區別MySql
- PostgreSQL的那點事兒SQL
- PostgreSQL 原始碼解讀(122)- MVCC#7(提交事務-整體流程)SQL原始碼MVCC#
- 十、Redis事務、事務鎖Redis
- 分散式事務之Spring事務與JMS事務(二)分散式Spring
- 什麼是事務、事務特性、事務隔離級別、spring事務傳播特性?Spring
- MySQL事務(一)認識事務MySql
- PostgreSQL 原始碼解讀(120)- MVCC#5(獲取事務號-主邏輯)SQL原始碼MVCC#
- PostgreSQL 原始碼解讀(123)- MVCC#8(提交事務-實際提交過程)SQL原始碼MVCC#
- 事務
- PostgreSQL 原始碼解讀(121)- MVCC#6(獲取事務號-實現函式)SQL原始碼MVCC#函式
- 分散式事務之資料庫事務與JDBC事務實現(一)分散式資料庫JDBC
- Spring事務專題(三)事務的基本概念,Mysql事務處理原理SpringMySql
- redis事務Redis
- mysql事務MySql
- Redis 事務Redis
- SQL事務SQL
- 05事務
- 01 事務
- JAVA事務Java
- oracle事務Oracle
- spring事務Spring
- Spring 事務Spring
- MySQL 事務MySql
- Spring的事務管理(二)宣告式事務管理Spring
- 資料庫事務與 MySQL 事務總結資料庫MySql
- 本地事務和分散式事務的區別分散式
- 分散式事務(一)—分散式事務的概念分散式