SQLite3建表提示外键定义中CargoID列不存在 如何排查语法错误?
问题原因
报错的核心逻辑是:SQLite要求外键定义中引用的字段,必须先在当前表的字段声明部分完成定义,你给出的建表语句共有3处可直接导致运行失败的错误:
- 直接触发你当前收到报错的问题:
Usuarios表的外键定义引用了CargoID字段,但你没有在Usuarios表的字段列表中声明该字段,反而额外定义了未使用的Cargo TEXT字段 - 隐藏报错点1:
Alunos表的外键定义引用了Criado_Por字段,但同样没有在Alunos表的字段列表中声明该字段 - 隐藏报错点2:
Alunos表的Data_Alteracao字段未指定数据类型,不符合SQLite建表语法要求
修正后可正常运行的SQL脚本
DROP TABLE IF EXISTS Usuarios; DROP TABLE IF EXISTS Alunos; DROP TABLE IF EXISTS Cargo; CREATE TABLE Cargo ( Nome_Cargo TEXT UNIQUE NOT NULL, CargoID INTEGER NOT NULL PRIMARY KEY UNIQUE ); CREATE TABLE Usuarios ( Id_Usuario INTEGER PRIMARY KEY AUTOINCREMENT, Nome TEXT UNIQUE NOT NULL, CargoID INTEGER, -- 补充外键关联所需的字段 CPF TEXT UNIQUE, Is_admin INTEGER, User_login TEXT UNIQUE NOT NULL, Senha TEXT NOT NULL, FOREIGN KEY (CargoID) REFERENCES Cargo(CargoID) ); CREATE TABLE Alunos ( Id_Aluno INTEGER PRIMARY KEY AUTOINCREMENT, Nome_Completo TEXT NOT NULL, RA TEXT UNIQUE, Data_Nascimento TEXT, RM INTEGER UNIQUE, Data_Alteracao TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP, -- 补充字段数据类型 Criado_Por INTEGER, -- 补充外键关联所需的字段 FOREIGN KEY (Criado_Por) REFERENCES Usuarios(Id_Usuario) );
内容的提问来源于stack exchange,提问作者Ricardo Lima
相关产品推荐
相关产品推荐

