【发布时间】:2014-05-06 12:42:12
【问题描述】:
我需要修改表格中的所有内容。所以我将修改包装在一个事务中,以确保所有操作都成功,或者都不成功。我从 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 令人惊讶的是,SELECT 语句的结果并没有显示“1|hello”。 看起来 DELETE 成功了,第一个 INSERT 成功了。但是,当第二次 INSERT 失败时(如预期的那样)......它没有 ROLLBACK 数据库。 这是一个 sqlite 错误吗?还是我对应该发生的事情的理解有误? 谢谢SQL error near line 10: column id is not unique
1|goodbye
【问题讨论】:
标签: sqlite