我現在知道MySQL
存在導致隱性承諾,像CREATE
,ALTER
等語句的長隆list我想知道是否有這樣的事情在SQLite
。交易SQLite中
換句話說,我想知道例如CREATE TABLE
和其他一些構造是否會導致自動提交,因此無法回滾?
我自己對它進行了測試,在我看來,就像SQLite
的行爲類似於MySQL
,但我不確定這一點,我希望對列出所有這些命令的文檔有一些參考(我找不到它) 。
此外,我想知道是否可以調整一些sqlite參數,以防止它形成自動提交CREATE
和其他語句。
編輯
一個額外的思考。我們都知道,例如,無法重命名SQLite中的字段或更改其類型(使用一個命令),但爲此,我們必須創建一個具有所需模式的新表並將數據導入到此表中。顯然,這樣的操作應該在單個事務中執行,但是如果實際上CREATE TABLE
和DROP TABLE
命令會導致自動提交?
相反實施
import sqlite3
cnx = sqlite3.connect("test.db")
cursor = cnx.cursor()
cursor.execute("CREATE TABLE funky (attr_1_ integer)")
cnx.rollback()
正如你所看到的,我不使用任何特殊的編譯,我甚至不提交明確的,但是當我運行它,然後去SQLITE3提示,我看到表funky
仍然存在。
如果你能詳細闡述一下,這將是很好的。事實是,我自己的測試沒有使用任何特殊的雜注顯示,例如'CREATE TABLE' autocommits。我猜還有另外一些命令也會導致隱式提交。所以,如果你能用可證實的例子來支持你的想法,那就太好了。 – Jacobian
這個問題是關於SQLite的,而不是關於[Python被誤導爲聰明的嘗試](https://docs.python.org/2/library/sqlite3.html#sqlite3-controlling-transactions)。 –
我會接受你的答案,如果你有點冗長。現在我無法理解你在這兩個短句中的實際含義。 – Jacobian