2013-04-12 32 views
1

問題是關於未包含在'begin-commit'塊中的查詢,而是關於在postgres,mysql(至少是innodb引擎)中原子化的普通插入和更新。那麼這是如何在內部實施的?數據庫原子操作實現

+1

在隱式事務(隱含的BEGIN ... COMMIT塊)的上下文中運行的「Plain」插入和更新。真的沒有區別。 –

+0

我想你應該寫這個答案,而不是評論 - 這將被接受 – zapadlo

+0

我寫它作爲一個答案,並鏈接到文檔。 –

回答

1

所有DML語句都在事務上下文中運行 - 顯式事務(BEGIN ... COMMIT)或隱式事務。我很確定所有SQL dbms都是如此。這當然是true for PostgreSQL

By default (without BEGIN), PostgreSQL executes transactions in "autocommit" mode, that is, each statement is executed in its own transaction and a commit is implicitly performed at the end of the statement (if execution was successful, otherwise a rollback is done).

+0

順便說一下,如果自動提交模式被關閉,該怎麼辦?無論如何,任何聲明都包含在開始...提交? – zapadlo

+0

除了在嵌入式SQL中,您無法真正關閉它。 (對於嵌入式SQL,默認設置已關閉。)BEGIN具有關閉它的效果; PostgreSQL將等待COMMIT或ROLLBACK。 –

+0

嗯,我可以在它的設置中執行mysql中的操作 - 我真的不能在postgres中執行相同的操作嗎?所以關於mysql的問題:如果autocommit設置爲0會怎麼樣? – zapadlo