mysql - Table with FK 指的是一张表有两个PK

标签 mysql foreign-keys

我有 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/

相关文章:

生成意外格式的 C# Entity Framework 6 外键约束

mysql - 如何选择包含用户输入的列?

本地网络上的 MySQL 远程访问出现身份验证错误

php - 如何将此 SQL 查询无错误地转换为 PDO 事务

php - MySql 查询 - 语法错误

MySQL:创建表时出现 FK 错误 (errno 150)

mysql - mysql中外键为主键

mysql - 带有子查询的选择中的上层表可见性

mysql - 在 MySQL 中声明外键

MongoDB 使用外键将字段复制到另一个集合