mysql - 尝试将多个外键添加到单个表时出错

标签 mysql foreign-keys constraints

我正在尝试创建一个约束来自父表的 3 个外键的子表,但收到错误1215:无法添加外键约束

父表:

    CREATE TABLE `Availability` (
   `time_of_day` varchar(20) NOT NULL,
   `day_of_week` varchar(20) NOT NULL,
   `email` varchar(60) NOT NULL,
   PRIMARY KEY (`time_of_day`,`day_of_week`,`email`),
   KEY `email` (`email`),
   CONSTRAINT `Availability_ibfk_1` FOREIGN KEY (`email`) REFERENCES `service_provider` (`email_service_provider`)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8

子表(由于上述错误我无法构建):

CREATE TABLE TEST1
(
  num_request INT NOT NULL,
  time_of_day VARCHAR(20) NOT NULL,
  day_of_week VARCHAR(20) NOT NULL,
  email VARCHAR(60) NOT NULL,
    PRIMARY KEY (num_request),
    Foreign key (time_of_day) references Availability(time_of_day),
    Foreign key (day_of_week) references Availability(day_of_week),
    Foreign key (email) references Availability(email)
  );

请告诉我我做错了什么......谢谢大家。

最佳答案

当您为具有复合主键(即多列的键)的表创建外键时,您也应该创建复合外键。

CREATE TABLE TEST1
(
  num_request INT NOT NULL,
  time_of_day VARCHAR(20) NOT NULL,
  day_of_week VARCHAR(20) NOT NULL,
  email VARCHAR(60) NOT NULL,
    PRIMARY KEY (num_request),
    Foreign key (time_of_day, day_of_week, email) references Availability(time_of_day, day_of_week, email)
)

外键的列应与其引用的主键或唯一键的列相匹配。它们应该具有相同的列数和相同的顺序。

您尝试做的是创建三个单独的约束,每个约束各一列。

关于mysql - 尝试将多个外键添加到单个表时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70407351/

相关文章:

期间之间的mysql日期

mysql - 从两个表中查找第三个表中不存在的组合

ios - UIViewController : adjust contraints of xib

Swift - 屏幕外的容器 View

Java JSpinner时间到MySQL数据库

java - 如何使用 Java 从 MySQL DB 获取 CSV 文件形式的数据

hibernate - 使用 JPA 与 Hibernate 提供程序的多对多关系不会创建主键

validation - Grails inList约束在错误消息中获取inList映射的值

mysql - 带有多个定界符的 sql-maven-plugin

asp.net - Entity Framework 从具有不同表关系主/外键场景的两个表中选择