- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当多个语句一起提交时——用分号分隔(;
)但在同一个字符串中——并且没有包含在显式事务中,仅创建一个隐式事务或者是一个分别为每个语句创建隐式事务?此外,如果后面的语句之一失败并执行自动回滚,是否回滚了所有语句?
这个其他answer几乎满足了我的问题,但官方文档中的措辞让我感到困惑。事实上,这看起来像是重复的,但我特别想知道多个语句的隐式事务。另一个答案没有明确解决这个特殊情况。
举个例子(借用另一个问题),以下内容作为单个字符串提交:
INSERT INTO a (x, y) VALUES (0, 0);
INSERT INTO b (x, y) VALUES (1, 2); -- line 3 error here, b doesn't have column x
Automatically started transactions are committed when the last query finishes. (emphasis added)
和
An implicit transaction (a transaction that is started automatically, not a transaction started by BEGIN) is committed automatically when the last active statement finishes. A statement finishes when its prepared statement is reset or finalized. (emphasis added)
关键字last 向我暗示了多个语句的可能性。当然,如果为每个单独的语句启动隐式事务,那么单独执行每个语句将是要执行的“最后”语句,但在单独语句的上下文中,它应该只是说 the 语句强调上下文是一次一个单一的陈述。
或者准备好的语句和未准备的 SQL 字符串之间有区别吗? (但据我所知,即使调用应用程序不保留准备好的语句以供重用,所有语句都会准备好,所以我不确定这是否重要。)
在所有语句都成功的情况下,单次提交或多次提交的结果本质上是一样的,但是文档只提到单条失败的语句会自动回滚,而没有提到其他语句一起提交.
最佳答案
sqlite3_prepare
接口(interface)编译查询字符串中的第一个 SQL 语句。这些函数的 pzTail
参数返回一个指向查询字符串未使用部分开头的指针。
例如,如果您在示例中使用多语句 SQL 字符串调用 sqlite3_prepare
,则第一个语句是唯一对生成的准备好的语句有效的语句. pzTail
指针(如果提供)指向第二条语句的开头。在您使用 pzTail
指针再次调用 sqlite3_prepare
之前,第二条语句不会编译为准备好的语句。
所以,不,不会回滚多个语句。 SQLite 引擎创建的每个隐式事务都包含一个准备好的语句。
关于sqlite - 自动回滚多个语句的隐式事务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55715413/
我是一名优秀的程序员,十分优秀!