You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQLite数据库迁移脚本执行失败:categoryId附近语法错误排查

问题原因与解决办法

错误原因

SQLite的CREATE TABLE语法规则中,表级外键约束不能穿插在列定义的中间。你在Job表的列定义过程中,插入了单独的FOREIGN KEY表级约束语句,导致解析器在遇到categoryId字段定义时无法正确识别语法,触发了syntax error。

解决办法

有两种合法的写法可以修正这个问题:

方法1:内联外键约束到列定义中

直接在列定义末尾添加REFERENCES子句,无需单独写FOREIGN KEY语句:

CREATE TABLE IF NOT EXISTS "Category" (
    id INTEGER PRIMARY KEY NOT NULL,
    name VARCHAR NOT NULL 
); 

CREATE TABLE IF NOT EXISTS "Location"(
        id INTEGER PRIMARY KEY NOT NULL,
        name VARCHAR NOT NULL 
); 

CREATE TABLE IF NOT EXISTS "Job" (
        id INTEGER PRIMARY KEY NOT NULL,
        createdAt datetime NOT NULL default current_time,
        title VARCHAR NOT NULL,
        description VARCHAR NOT NULL,
        locationId INTEGER NOT NULL REFERENCES Location(id),
        categoryId INTEGER NOT NULL REFERENCES Category(id)
);

方法2:将表级外键约束移到所有列定义之后

把所有列定义写完后,再集中定义表级外键约束,用逗号分隔每个约束:

CREATE TABLE IF NOT EXISTS "Category" (
    id INTEGER PRIMARY KEY NOT NULL,
    name VARCHAR NOT NULL 
); 

CREATE TABLE IF NOT EXISTS "Location"(
        id INTEGER PRIMARY KEY NOT NULL,
        name VARCHAR NOT NULL 
); 

CREATE TABLE IF NOT EXISTS "Job" (
        id INTEGER PRIMARY KEY NOT NULL,
        createdAt datetime NOT NULL default current_time,
        title VARCHAR NOT NULL,
        description VARCHAR NOT NULL,
        locationId INTEGER NOT NULL,
        categoryId INTEGER NOT NULL,
        FOREIGN KEY(locationId) REFERENCES Location(id),
        FOREIGN KEY(categoryId) REFERENCES Category(id)
);

内容的提问来源于stack exchange,提问作者shtepa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 09:05:22