MySQL Error 1215创建外键

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL Error 1215创建外键相关的知识,希望对你有一定的参考价值。

我的问题是关于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表中的主要/唯一键。创建索引并不意味着您在同一列上创建键。所以,仅为了您的信息。 Parent表中引用的列必须是键的最左侧列。如果关键是PRIMARY KEYUNIQUE KEY最好。

正如@Bill评论的那样,他有一个answer,他准备了一份清单,你可以参考确保,你不会得到任何其他错误。

以上是关于MySQL Error 1215创建外键的主要内容,如果未能解决你的问题,请参考以下文章

MySQL : ERROR 1215 (HY000): 无法添加外键约束

创建外键时出错:MySQL 错误 1215:无法添加外键约束 [重复]

MYSQL Workbench - 错误:错误 1215:无法添加外键约束

mysql执行带外键的sql文件时出现mysql ERROR 1215 (HY000): Cannot add foreign key constraint的解决

MySQL 使用外键创建模式抛出错误 1215

MySQL ERROR 1215 (HY000)的一个情况