MySQL 创建外键时出现错误 1215

标签 mysql foreign-keys mysql-error-150

我的问题是关于 MySQL 的,在尝试将架构转发到数据库服务器时,我不断收到错误(错误 1215:无法添加外键约束),我有两个父表:

CREATE TABLE IF NOT EXISTS alunos (
    idAluno INT NOT NULL AUTO_INCREMENT,
    NomeAluno VARCHAR(100) NOT NULL,
    nifAluno VARCHAR(15) NOT NULL,
    moradaAluno VARCHAR(255) NOT NULL,
    telefoneAluno VARCHAR(9) NOT NULL,
    emailAluno VARCHAR(255) NOT NULL DEFAULT "Nao fornecido",
    PRIMARY KEY(idAluno, nifAluno)
) ENGINE=INNODB;

CREATE TABLE IF NOT EXISTS cursos (
    idCurso INT NOT NULL AUTO_INCREMENT,
    nomeCurso VARCHAR(50) NOT NULL,
    horas INT NOT NULL,
    PRIMARY KEY(idCurso, nomeCurso)
) ENGINE=INNODB;

这是我的子表:

CREATE TABLE IF NOT EXISTS inscritos (
    id INT NOT NULL AUTO_INCREMENT,
    Nome VARCHAR(100) NOT NULL,
    Morada VARCHAR(255) NOT NULL,
    Naturalidade VARCHAR(45) NOT NULL,
    NIF VARCHAR(15) NOT NULL,
    email VARCHAR(255) NOT NULL DEFAULT "Nao fornecido",
    Telefone VARCHAR(9) NOT NULL,
    Curso VARCHAR(50) NOT NULL,
    Horas INT NOT NULL,
    Inicio DATE NOT NULL,
    Validade DATE NOT NULL,
    Atividade VARCHAR(45) NOT NULL,

    PRIMARY KEY(id),
    INDEX(NIF),
    INDEX(Curso),

    FOREIGN KEY(NIF)
        REFERENCES alunos(nifAluno)
        ON UPDATE CASCADE ON DELETE RESTRICT,

    FOREIGN KEY(Curso)
        REFERENCES cursos(nomeCurso)
        ON UPDATE RESTRICT ON DELETE RESTRICT

) ENGINE=INNODB;

我一遍又一遍地查看代码,似乎找不到分配外键时的错误。

提前致谢。

最佳答案

因为,NIFCurso 不是 inscritos 表中的主键/唯一键。创建索引并不意味着您在同一列上创建键。所以,仅供引用。父表中引用的列必须是键的最左边的列。最好 key 是PRIMARY KEYUNIQUE KEY

正如 @Bill 评论的那样,他有一个 answer他准备了一份 list ,你可以引用一下,确保不会出现任何其他错误。

关于MySQL 创建外键时出现错误 1215,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48106610/

相关文章:

mysql 错误 150 在两个表中引用相同的外键列

mysql - 是否有 Adempiere ERP 380 的 MySQL 种子数据库转储

mysql - MySQL创建带有外键给errno的表:150

MySQL 使用外键创建表给出 errno : 150

MySQL:如何更新同一个表的外键?

mysql - InnoDb如何创建外键

php - 测试一个特定的 id 是否被用作任何外部表条目中的外键

PHP使用mysql相关函数时报错

mysql - 选择第一个和最后两个元素

php - UTF-8贯穿始终