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

DBeaver执行SQLite建表语句报fk_GRADES_ID附近语法错误

报错原因
  • 外键定义语法不符合SQLite规则:SQLite表级外键的标准结构为[CONSTRAINT 自定义约束名] FOREIGN KEY (子表关联字段) REFERENCES 父表名(父表关联字段)。你写的FOREIGN KEY fk_xxx_ID REFERENCES School(ID)存在两处语法错误:一是自定义外键名前缺少CONSTRAINT关键字,二是FOREIGN KEY后没有用括号指定当前表中用来做关联的字段,解析器读到fk_GRADES_ID位置时无法识别语法,直接抛出错误。
  • 关联字段缺失:三个子表events、CALENDAR、GRADES中都没有定义存储School表ID的字段,外键关联没有对应的承载字段,逻辑不成立。
  • 语句未闭合:最后一个GRADES表的建表语句末尾缺少右括号和结束分号,会加剧语法解析错误。
修正方案
  1. 给每个需要关联School表的子表新增专门的外键字段(示例中用school_id命名,可根据业务需求调整)。
  2. 按照SQLite标准语法调整外键定义,补全缺失的语句闭合符。

修正后可正常执行的SQL代码如下:

-- 开启外键校验(SQLite默认关闭,需要外键生效时执行)
PRAGMA foreign_keys = ON;

CREATE TABLE School (
ID INTEGER PRIMARY KEY ,
Name TEXT NOT NULL
);

CREATE TABLE events (
ID INTEGER PRIMARY KEY ,
details TEXT NOT NULL,
start_data TEXT NOT NULL,
end_data  TEXT NOT NULL,
title TEXT NOT NULL,
school_id INTEGER NOT NULL,
CONSTRAINT fk_events_ID FOREIGN KEY (school_id) REFERENCES School(ID)
);

CREATE TABLE CALENDAR (
ID INTEGER PRIMARY KEY,
title TEXT NOT NULL,
details TEXT NOT NULL,
start_data TEXT NOT NULL,
end_data  TEXT NOT NULL,
subject INTEGER NOT NULL,
school_id INTEGER NOT NULL,
CONSTRAINT fk_CALENDAR_ID FOREIGN KEY (school_id) REFERENCES School(ID)
);

CREATE TABLE GRADES (
ID INTEGER PRIMARY KEY ,
title TEXT NOT NULL,
coefficent REAL NOT NULL,
value REAL NOT NULL,
date_time TEXT NOT NULL,
Subject INTEGER NOT NULL,
school_id INTEGER NOT NULL,
CONSTRAINT fk_GRADES_ID FOREIGN KEY (school_id) REFERENCES School(ID)
);
  • 如果不需要自定义外键名,可以省略CONSTRAINT fk_xxx_ID部分,SQLite会自动生成默认约束名。
  • 如果业务上不需要子表和School表做关联,直接删除所有外键定义语句即可正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 08:24:21