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

DBeaver使用SQLite创建数据库执行SQL报语法错误问题排查

SQLite 建表语法错误排查与修正

现存问题

你的SQL代码存在3类会直接触发报错的问题,另有2处易引发后续问题的笔误:

  • 多余尾逗号:School表最后一个字段Name TEXT NOT NULL后多写了逗号,SQL不允许字段定义列表末尾出现多余逗号,这是最直接的语法报错原因。
  • 外键约束语法错误:你在三个子表中写的CONSTRAINT pk_School_ID REFERENCES School(ID)不符合SQLite语法规范:
    • 外键约束必须通过FOREIGN KEY (当前表字段名)明确指定当前表中用于关联的列,你没有定义对应关联字段,也没有在外键中声明关联列,数据库无法建立关联关系
    • 约束名前缀pk_是主键约束的通用命名前缀,外键约束建议使用fk_前缀避免混淆
  • 字段拼写笔误(不触发语法错误但会导致后续业务逻辑异常):
    • 表示日期的字段你写为start_data/end_data,data含义为数据,正确的日期拼写是date
    • 表示系数的字段coefficent拼写错误,正确拼写为coefficient

修正后可运行代码

执行前注意:SQLite默认关闭外键约束校验,需要先执行PRAGMA foreign_keys = ON;开启,外键关联规则才会生效。

PRAGMA foreign_keys = ON;

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

CREATE TABLE events (
    ID INTEGER PRIMARY KEY NOT NULL,
    SchoolID INTEGER NOT NULL,
    details TEXT NOT NULL,
    start_date TEXT NOT NULL,
    end_date TEXT NOT NULL,
    title TEXT NOT NULL,
    CONSTRAINT fk_events_SchoolID FOREIGN KEY (SchoolID) REFERENCES School(ID)
);

CREATE TABLE CALENDAR (
    ID INTEGER NOT NULL PRIMARY KEY,
    SchoolID INTEGER NOT NULL,
    title TEXT NOT NULL,
    details TEXT NOT NULL,
    start_date TEXT NOT NULL,
    end_date TEXT NOT NULL,
    subject INTEGER NOT NULL,
    CONSTRAINT fk_calendar_SchoolID FOREIGN KEY (SchoolID) REFERENCES School(ID)
);

CREATE TABLE GRADES (
    ID INTEGER PRIMARY KEY NOT NULL,
    SchoolID INTEGER NOT NULL,
    title TEXT NOT NULL,
    coefficient REAL NOT NULL,
    value REAL NOT NULL,
    date_time TEXT NOT NULL,
    Subject INTEGER NOT NULL,
    CONSTRAINT fk_grades_SchoolID FOREIGN KEY (SchoolID) REFERENCES School(ID)
);

补充说明

如果你的业务设计中events/CALENDAR/GRADES表不需要直接关联School表,只需要删掉对应外键定义、移除新增的SchoolID字段即可;如果是关联其他业务表(比如科目表、用户表),只需要将外键关联的父表、当前表关联字段替换为实际业务对应的字段即可,核心是外键定义必须明确指定当前表的关联列。

内容的提问来源于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.30 14:57:29