本文介绍 OceanBase 数据库 MySQL 模式下添加外键时报 ERROR 1215 错误的处理方法。
问题现象
为 cust 表创建外键约束时,显示关联字段错误。
obclient> ALTER TABLE cust ADD CONSTRAINT c_fk FOREIGN KEY (c_w_id) REFERENCES ware(w_name);
ERROR 1215 (HY000): Cannot add foreign key constraint
该报错信对应的错误码信息如下:
错误码:ERROR 1215
OceanBase 错误码:5317
兼容 MySQL 错误码:1215
可能原因
添加外键约束时,如果外键的字段与关联字段的类型不匹配时,系统就会报错。
添加外建时,被引用的父表的列不是主键或者唯一索引,系统就会报错。
解决方法
请参考以下步骤,查看当前表与关联表中各字段类型,确认关联表的主键后,再重新创建外键约束。
查看
ware和cust表的表结构,并找到关联表的主键。obclient> DESC ware; +--------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------+--------------+------+-----+---------+-------+ | w_id | int(11) | NO | PRI | NULL | | | w_name | varchar(256) | YES | UNI | NULL | | | w_city | varchar(256) | YES | UNI | NULL | | +--------+--------------+------+-----+---------+-------+ 3 rows in set obclient> DESC cust; +--------+---------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------+---------+------+-----+---------+-------+ | c_id | int(11) | NO | PRI | NULL | | | c_w_id | int(11) | YES | | NULL | | +--------+---------+------+-----+---------+-------+ 2 rows in set重新创建表
cust的外键约束。obclient> ALTER TABLE cust ADD CONSTRAINT c_fk FOREIGN KEY (c_w_id) REFERENCES ware(w_id); Query OK, 0 rows affected