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
相关产品推荐
相关产品推荐

