Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
sqlite事务不支持删除_Sqlite - Fatal编程技术网

sqlite事务不支持删除

sqlite事务不支持删除,sqlite,Sqlite,我需要修改表中的所有内容。因此,我将修改封装在事务中,以确保所有操作都成功,或者没有操作成功。我用DELETE语句开始修改,然后是INSERT语句。我发现,即使插入失败,删除仍会发生,并且数据库不会回滚到事务前状态 我创建了一个示例来演示这个问题。将以下命令放入名为EXAMPLE.SQL的脚本中 CREATE TABLE A(id INT PRIMARY KEY, val TEXT); INSERT INTO A VALUES(1, “hello”); BEGIN; DELETE

我需要修改表中的所有内容。因此,我将修改封装在事务中,以确保所有操作都成功,或者没有操作成功。我用DELETE语句开始修改,然后是INSERT语句。我发现,即使插入失败,删除仍会发生,并且数据库不会回滚到事务前状态

我创建了一个示例来演示这个问题。将以下命令放入名为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”

似乎删除成功,第一次插入成功。但是当第二次插入失败时(正如预期的那样)…它没有回滚数据库

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

谢谢

它正常工作了

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

要取消事务,请使用
回滚
,而不是
提交
。没有自动的
回滚
,除非您将其指定为冲突解决,例如
插入或回滚到…

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

显示了导致自动回滚的错误类型:

SQLITE_FULL: database or disk full
SQLITE_IOERR: disk I/O error
SQLITE_BUSY: database in use by another process
SQLITE_NOMEM: out or memory
SQLITE_INTERRUPT: processing interrupted by application request 
对于其他错误类型,您需要捕获错误并回滚,更多信息将在中介绍。

Spot on.Thank.FYI--我使用sqlite命令shell作为概念证明。实际的解决方案将是代码,在这种情况下,我们显然会进行回滚。非常感谢。