MariaDB建表报referenced table not found in data dictionary错误咨询
MariaDB 1005外键约束报错问题排查
你遇到的报错本质是外键约束配置不符合MariaDB规则,结合你提供的代码片段,问题通常出在以下几个方面:
- 关联的父表未提前创建
你代码中所有外键关联的父表包括Artikel、Bestellung、Mitarbeiter、Projekt、Abteilung均未在这段代码中给出完整的前置创建逻辑,外键约束要求被引用的父表必须已经存在于当前数据库中。另外你代码开头的Bestellung表创建语句是不完整的,缺少CREATE TABLE Bestellung (开头以及Bestellnummer字段的定义。 - 关联字段属性不匹配
外键字段和父表中被引用的字段必须完全匹配,包括数据类型、长度、是否无符号、字符集、排序规则。比如你代码中FK_Artikelnummer定义为char(10),必须保证Artikel表的Artikelnummer字段也是char(10),且字符集排序规则完全一致;FK_PersNr定义为int,必须保证Mitarbeiter表的PersNr字段也是相同类型的int,不存在有符号/无符号的差异。 - 父表引用字段不符合约束要求
外键约束要求父表中被引用的列必须是主键(PRIMARY KEY)或者带有唯一(UNIQUE)约束,你需要确认比如Projekt表的ProjektNr、Abteilung表的Abkuerzung等字段都是主键或者有唯一约束。 - 表名/字段名拼写或大小写错误
MariaDB在Linux环境下默认表名区分大小写,你需要确认引用的表名、字段名的拼写和大小写与实际创建时完全一致。
你可以调整创建顺序,先创建所有父表,再创建子表,最后统一添加外键约束,可以避免创建顺序带来的报错。
内容的提问来源于stack exchange,提问作者Sasha Krivenko
相关产品推荐
相关产品推荐

