在sqlite中创建索引时的OperationalError

6 投票
1 回答
3210 浏览
提问于 2025-04-15 20:02

编辑:简而言之

我输入的是这个

CREATE INDEX IF NOT EXISTS IDX_FILE_SIZE table_name (file_size); 

而不是这个

CREATE INDEX IF NOT EXISTS IDX_FILE_SIZE ON table_name (file_size); 

别这么做。

1 个回答

5

一些傻傻的问题:

是不是巧合,出问题的那条语句缺少了单词 ON 呢?

比如说:
CREATE INDEX IF NOT EXISTS IDX_FILE_FULLPATH_FILE_PARENT_DIR ON table_name (file_fullpath, file_parent_dir);
CREATE INDEX IF NOT EXISTS IDX_FILE_SIZE table_name (file_size); -- 这里缺少 ON
CREATE INDEX IF NOT EXISTS IDX_TAG_TITLE ON table_name (tag_title);

在你提问的那些话里,我有没有看到“语法错误”这个词呢?

你有没有试过在sqlite3命令行工具里运行这些SQL语句,看看实际出现了什么样的语法错误?

比如说:

SQLite version 3.6.14
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> create table foo (bar int, zot int);
sqlite> create index barx on foo(bar);
sqlite> create index zotx    foo(zot);
SQL error: near "foo": syntax error
sqlite>

你有没有考虑过看看文档里的TFRRD(奇妙的铁路图)

你写道:“当我在较小的脚本(verifyIndexSmaller)中运行那个命令时,没有错误。如果我再尝试运行较大的脚本,尽管索引已经被较小的脚本创建了,我还是会得到错误。”

你有没有想过,你并没有在较小的脚本中运行那个命令,而是运行了另一个(修正过的!)版本的命令?

你现在明白为什么S.Lott想让你少说废话,专注于导致错误的那条SQL语句了吗?

撰写回答