SQlite的:一个脚本创建表时失败不会回滚

问题描述:

我已经在一个文件中这个简单的脚本命名为test.sqlSQlite的:一个脚本创建表时失败不会回滚

begin; 
create table t1 (id integer); 
create table t2; --error here 
commit; 

该脚本有一个明显的错误在第3行我把这个脚本如下命令行:

sqlite3.exe test.db ".read test.sql" 

正如预期的那样,可执行文件因为语法错误而无法归咎第3行。但是,尽管存在开头begin,但数据库test.db已创建且包含表t1

这是预期的行为?不应该回滚?如何确保只有在创建成功所有表时才提交表?

+0

您可以尝试'begin exclusive' – Hackerman

默认情况下,command-line shell将所有语句视为交互输入。

要发生错误时停止,请使用.bail on

+0

谢谢。我还注意到,我的原始命令行现在留下了一个打开的日志文件,而调用'sqlite3.exe test.db user1735003