首页 > 解决方案 > 在非主键之间创建外键关系时出错

问题描述

我有两张桌子

CREATE TABLE `abc` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`ref_id` varchar(20) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `ref_id_UNIQUE` (`ref_id`)
)

CREATE TABLE `xyz` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `ref_id` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `ref_id_UNIQUE` (`ref_id`)
 )

我想在 xyz 的 ref_id 和 abc 的 ref_id 之间建立外键关系。但是 Mysql 给出了错误 1215。

标签: mysqlsqldatabaseforeign-keys

解决方案


您应该与主键建立外键关系。我知道 MySQL 允许与索引的任何内容建立外键关系。但正确的做法是使用主键。

所以像这样声明表:

CREATE TABLE `xyz` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
  abc_id int DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `ref_id_UNIQUE` (`abc_id`),
  ADD CONSTRAINT fk_xyz_abc FOREIGN KEY (abc_id) REFERENCES abc(id)
);

如果您想要一行,则使用来ref_id获取信息。xyzJOIN


推荐阅读