我现在知道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