MySQL 创建外键错误 1215

MySQL Error 1215 creating foreign key

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

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;

这是我的 child table:

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 不是 primary/unique inscritos table 中的键值。创建索引并不意味着您在同一列上创建键。所以,仅供参考。 Parent table 中引用的列必须是键最左边的列。如果键是 PRIMARY KEYUNIQUE KEY 最好。

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