我有 table1,id 和 name 列都作为 PK,table2 会有一个引用 table1 列的 FK:name,当我在 MySQL Workbench 中创建 FK 时,我得到这个错误:
ERROR 1215: Cannot add foreign key constraint
table1: level, id enum(), name varchar(20) BOTH PK.
table2: class, id bigint PK AutoIncrement, level_name varchar(20), number int.
level_name
是PK名称的FK
最佳答案
添加外键你需要关心一些事情,比如你在 table1 中的情况,你已经制作了 PRIMARY KEY (id,name)
并且在第二个表中你引用了 level_name
是错误的外键你需要从你的类表中引用一对列才能创建外键添加 level_id
相同类型的 id
来自 table1 level
的列,然后将这对 FOREIGN KEY (level_id, level_name)
引用到表 level
请参阅下面的表示例架构
CREATE TABLE `level` (
`id` enum('1','2','3','4','5') NOT NULL,
`name` varchar(20) NOT NULL,
PRIMARY KEY (`id`,`name`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE `class` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`level_name` varchar(20) NOT NULL,
`level_id` enum('1','2','3','4','5') DEFAULT NULL,
`number` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `fk_key` (`level_id`,`level_name`),
CONSTRAINT `fk_key` FOREIGN KEY (`level_id`, `level_name`)
REFERENCES `level` (`id`, `name`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Demo
关于mysql - Table with FK 指的是一张表有两个PK,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26441984/