SQL外键语句报Invalid identifier错误,请求技术协助
解决外键「invalid identifier」错误的方案
错误根源
- 外键列不存在于当前表:
执行ALTER TABLE fahrzeuge添加外键时,用到的filiale和idk字段根本没在fahrzeuge表中定义,数据库找不到这些列,直接抛出「invalid identifier」。 - 被引用表缺少主键/唯一约束:
外键必须关联到目标表的主键或唯一索引列,但haendler、mitarbeiter、kunden都没设置主键,不符合外键关联的规则。 - 操作不存在的表:
最后一条ALTER语句针对autosorte表,但这个表从未创建,数据库无法识别该表。
修复后的完整SQL代码
-- 先创建所有表,并为主键列添加主键约束 CREATE TABLE haendler ( haendlername varchar(20), idh1 char, idh2 char, PRIMARY KEY(idh2) -- 设置idh2为主键,作为外键关联目标 ); CREATE TABLE fahrzeuge ( marke varchar(20), autonummer char, idfa char, position varchar(20), korstenprotag char, status varchar(20), tec_ps char, tec_gewicht char, tec_sitze char, tec_verbrauch char, filiale char, -- 添加缺失的外键列 idk char -- 添加缺失的外键列 ); CREATE TABLE kunden ( kundenname varchar(20), kundenvorname varchar(20), kundennummer char, idk char, adr_stadt varchar(20), adr_bereich char, PRIMARY KEY(idk) -- 设置idk为主键 ); CREATE TABLE mitarbeiter ( mitarbeitername varchar(20), mitarbeitervorname varchar(20), mitarbeiternummer char, fachbereichnr char, filiale char, idm char, gehaltpromonat char, PRIMARY KEY(filiale) -- 设置filiale为主键(根据业务需求可调整为其他列,比如mitarbeiternummer) ); -- 创建缺失的autosorte表 CREATE TABLE autosorte ( idh2 char, -- 包含外键关联所需的列 -- 可根据业务需求添加其他字段 PRIMARY KEY(idh2) ); -- 添加外键约束,明确指定关联的目标表列 ALTER TABLE fahrzeuge ADD CONSTRAINT fk_mitarbeiter_fahrzeuge FOREIGN KEY (filiale) REFERENCES mitarbeiter(filiale); ALTER TABLE fahrzeuge ADD CONSTRAINT fk_kunden_fahrzeuge FOREIGN KEY (idk) REFERENCES kunden(idk); ALTER TABLE autosorte ADD CONSTRAINT fk_haendler_autosorte FOREIGN KEY (idh2) REFERENCES haendler(idh2);
额外说明
- 外键关联时必须明确写出目标表的对应列,避免数据库默认匹配主键时出现逻辑错误。
- 主键列的选择要贴合业务逻辑,比如
mitarbeiter表更适合用mitarbeiternummer作为唯一标识,上述代码仅为匹配示例需求调整,实际使用请根据业务场景修改。
内容的提问来源于stack exchange,提问作者Eric Blacker
相关产品推荐
相关产品推荐

