Transaction

數據庫原子操作實現

  • April 12, 2013

問題是關於未包含在“begin-commit”塊中的查詢,而是關於在 PostgreSQL、MySQL(至少是 innodb 引擎)中原子的普通插入和更新。那麼這在內部是如何實現的呢?

為在顯式事務塊之外發生的每個語句啟動一個事務。是否在語句之後自動發出送出取決於 RDBMS 配置。MySQL 有自動送出選項,SQL Server 有 IMPLICIT_TRANSACTIONS,PostgreSQL 總是自動送出。

PostgreSQL :

在標準中,不必發出 START TRANSACTION 來啟動事務塊:任何 SQL 命令都隱式地開始一個塊。PostgreSQL 的行為可以被視為在每個不遵循 START TRANSACTION(或 BEGIN)的命令之後隱式發出 COMMIT,因此通常稱為“自動送出”。為了方便起見,其他關係數據庫系統可能會提供自動送出功能。

創新數據庫

在 InnoDB 中,所有使用者活動都發生在事務中。如果啟用了自動送出模式,則每個 SQL 語句都會單獨形成一個事務。預設情況下,MySQL 在啟用自動送出的情況下為每個新連接啟動會話,因此如果該語句沒有返回錯誤,MySQL 會在每個 SQL 語句之後執行送出。

SQL 伺服器

SQL Server 在以下事務模式下執行。

自動送出事務 - 每個單獨的語句都是一個事務。

顯式事務 - 每個事務都以 BEGIN TRANSACTION 語句顯式啟動,並以 COMMIT 或 ROLLBACK 語句顯式結束。

隱式事務 - 前一個事務完成時隱式啟動新事務,但每個事務都使用 COMMIT 或 ROLLBACK 語句顯式完成。

引用自:https://dba.stackexchange.com/questions/39800