MySQL错误: cannot add foreign key constraint,但数据类型匹配

标签 mysql

我正在尝试创建带有外键的表,但我不断收到错误 1215,指出它无法添加外键约束。我仔细检查了约束的数据类型和 REFERENCES 部分,这似乎是有序的。在阅读了一些 MySQL 文档中的错误后,我添加了 ENGINE=InnoDB,但这并没有解决问题。我是创建新数据库的新手,所以我认为我错过了一些东西。我可以添加什么来解决此错误?

CREATE DATABASE cemc;
USE cemc;

CREATE TABLE CALENDAR(
    year            INT                 NOT NULL,
    term            VARCHAR(25)         NOT NULL,
    term_start      DATE                NOT NULL,
    term_end        date                NOT NULL,

    CONSTRAINT      CALENDAR_PK         PRIMARY KEY(year, term)
)ENGINE=InnoDB;

CREATE TABLE COURSE(
    course_id       VARCHAR(6)          NOT NULL,
    skill           VARCHAR(25)         NOT NULL,
    level           VARCHAR(25)         NOT NULL,

    CONSTRAINT      COURSE_PK           PRIMARY KEY(course_id)
)ENGINE=InnoDB;

CREATE TABLE TEACHER(
    teacher_id      VARCHAR(50)         NOT NULL,
    teacher_last    VARCHAR(25)         NOT NULL,
    teacher_first   VARCHAR(25)         NOT NULL,
    email1          VARCHAR(50)         NOT NULL,
    email2          VARCHAR(50)         NULL,
    phone1          INT                 NOT NULL,
    phone2          INT                 NULL,

    CONSTRAINT      TEACHER_PK          PRIMARY KEY(teacher_id)  
)ENGINE=InnoDB;

CREATE TABLE COURSEASSIGNMENT(
    course_id       VARCHAR(6)          NOT NULL,
    year            INT                 NOT NULL,
    term            VARCHAR(25)         NOT NULL,
    teacher_id      VARCHAR(50)         NULL,
    room            VARCHAR(3)          NULL,

    CONSTRAINT      COURSEA_PK          PRIMARY KEY(course_id, term),
    CONSTRAINT      COURSEA_FK1         FOREIGN KEY(term)
                                        REFERENCES CALENDAR(term),
    CONSTRAINT      COURSEA_FK2         FOREIGN KEY(course_id)
                                        REFERENCES COURSE(course_id),
    CONSTRAINT      COURSEA_FK3         FOREIGN KEY(year)
                                        REFERENCES CALENDAR(year),
    CONSTRAINT      COURSEA_FK4         FOREIGN KEY(teacher_id)
                                        REFERENCES TEACHER(teacher_id)
)ENGINE=InnoDB;

最佳答案

问题是您尝试引用日历。到目前为止,您对数据类型的处理是正确的。但日历有一个组合主键。因此,您需要一次性定义外键,而不是两者分开,因为 mysql 将这两个外键解释为单独的外键而不是组合的外键。这导致它无法创建外键。

因此你需要这样做:

CONSTRAINT      COURSEA_PK          PRIMARY KEY(course_id, term),
CONSTRAINT      COURSEA_FK1         FOREIGN KEY(year, term)
                                    REFERENCES CALENDAR(year, term),
CONSTRAINT      COURSEA_FK2         FOREIGN KEY(course_id)
                                    REFERENCES COURSE(course_id),
CONSTRAINT      COURSEA_FK4         FOREIGN KEY(teacher_id)
                                    REFERENCES TEACHER(teacher_id)

关于MySQL错误: cannot add foreign key constraint,但数据类型匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33647299/

相关文章:

PHP 与 MySQL 的搜索功能

php - MySQL,连接多个表而不是连接?

mysql - 使用 phpMyAdmin 导出数据库

php - MYSQL从简单文本备份到phpmyadmin

php - 返回值取决于是否存在相似记录

Mysql group by order by 性能低下

php - 在结果中按特定单词选择和分组 MySQL 列

mysql - mysql中获取两个日期之间的数据

mysql - 通过 MySQL 计算字符串中的出现次数

php - 如何在 PHP 中从多维对象创建数组?