创建race表时提示外键约束引用的carid列不存在如何解决?
问题根因
你在为race表定义外键约束前,没有先在race表的字段列表中声明carId、trackId两个本地字段,数据库无法找到对应字段自然会抛出不存在的报错。同时你原有race_schema中lapIndex INT末尾多了一个多余逗号,也可能引发语法错误。
修正后的代码示例
car_schema = """ carId VARCHAR NOT NULL, PRIMARY KEY(carId) """ track_schema = """ trackId VARCHAR PRIMARY KEY NOT NULL, trackLength INT NOT NULL, lap_distance DECIMAL NOT NULL """ race_schema = """ raceId VARCHAR PRIMARY KEY NOT NULL, -- 先声明外键对应的本地字段,字段类型需和引用的主键类型完全一致 carId VARCHAR NOT NULL, trackId VARCHAR NOT NULL, lapIndex INT, -- 再声明外键约束 FOREIGN KEY (carId) REFERENCES car(carId), FOREIGN KEY (trackId) REFERENCES track(trackId) """
其他注意事项
- 建表需要严格按照
car→track→race的顺序执行,否则外键引用的父表还未创建,也会触发报错 - 若使用大小写敏感的数据库(如PostgreSQL),未加双引号的标识符会被默认转为小写,若要保留驼峰命名格式,可以给字段名加上双引号包裹
内容的提问来源于stack exchange,提问作者Finndotno
相关产品推荐
相关产品推荐

