SQlite的:一个脚本创建表时失败不会回滚
问题描述:
我已经在一个文件中这个简单的脚本命名为test.sql
:SQlite的:一个脚本创建表时失败不会回滚
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
。
这是预期的行为?不应该回滚?如何确保只有在创建成功所有表时才提交表?
答
默认情况下,command-line shell将所有语句视为交互输入。
要发生错误时停止,请使用.bail on
。
+0
谢谢。我还注意到,我的原始命令行现在留下了一个打开的日志文件,而调用'sqlite3.exe test.db
您可以尝试'begin exclusive' – Hackerman