gpt4 book ai didi

sqlite - sqlite交易不尊重删除

转载 作者:行者123 更新时间:2023-12-03 18:36:02 24 4
gpt4 key购买 nike

我需要修改表中的所有内容。因此,我将修改包装在事务中,以确保所有操作成功或不成功。我先使用DELETE语句,再执行INSERT,进行修改。我发现的是,即使INSERT失败,DELETE仍然发生,并且数据库没有回滚到事务前的状态。

我创建了一个示例来演示此问题。将以下命令放入名为EXAMPLE.SQL的脚本中

CREATE TABLE A(id INT PRIMARY KEY, val TEXT);

INSERT INTO A VALUES(1, “hello”);

BEGIN;
DELETE FROM A;
INSERT INTO A VALUES(1, “goodbye”);
INSERT INTO A VALUES(1, “world”);
COMMIT;

SELECT * FROM A;


如果运行脚本:“ sqlite3 a.db
SQL error near line 10: column id is not unique
1|goodbye


令人惊讶的是SELECT语句的结果未显示“ 1 | hello”。

看来DELETE是成功的,并且第一次INSERT是成功的。但是当第二次INSERT失败时(如预期的那样)……它没有回滚数据库。

这是sqlite错误吗?还是我对应该发生的事情的理解有误?

谢谢

最佳答案

它可以正常工作。

COMMIT提交事务中的所有操作。涉及world的那个有问题,因此未包含在事务中。

要取消交易,请使用ROLLBACK,而不是COMMIT。没有自动ROLLBACK,除非您将其指定为解决冲突的方法,例如INSERT OR ROLLBACK INTO ...

并对字符串文字使用'单引号而不是

关于sqlite - sqlite交易不尊重删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23495065/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com