【问题标题】:SQL #1215 - Cannot add foreign key constraintSQL #1215 - 无法添加外键约束
【发布时间】:2015-03-17 13:03:45
【问题描述】:

我有这个代码来创建一个 SQL 表,但是我遇到了 #1215 错误。

CREATE TABLE ‘Categorie’ (
‘catID’ int(11) NOT NULL AUTO_INCREMENT,
‘naam’ varchar(20) NOT NULL,
‘prioriteit’ int(2) NOT NULL,
‘subCatVan’ int(11) DEFAULT NULL,
PRIMARY KEY (‘catID’),
CONSTRAINT ‘subCatVan’ FOREIGN KEY (‘subCatVan’) REFERENCES Categorie

(‘catID’) ON DELETE SET NULL ON UPDATE CASCADE
);

感谢您的帮助!

【问题讨论】:

标签: mysql sql database constraints


【解决方案1】:

正如 Jens 已经指出的,您的蜱虫存在问题。首先,MySQL 中的标识符引号字符默认是反引号(`),其次,您没有在外键约束中使用记号作为表名。

用反引号替换所有刻度,您的语句将起作用(即使在外键约束中的表名周围没有刻度)。把所有的勾去掉,你的陈述就会奏效。将REFERENCES Categorie 更改为REFERENCES ‘Categorie’,您的语句将起作用(尽管可能与预期不同)。

我建议在所有地方都使用反引号作为一种好习惯:

CREATE TABLE `Categorie` (
`catID` int(11) NOT NULL AUTO_INCREMENT,
`naam` varchar(20) NOT NULL,
`prioriteit` int(2) NOT NULL,
`subCatVan` int(11) DEFAULT NULL,
PRIMARY KEY (`catID`),
CONSTRAINT `subCatVan` FOREIGN KEY (`subCatVan`) REFERENCES `Categorie`

(`catID`) ON DELETE SET NULL ON UPDATE CASCADE
);

目前发生的情况是,您实际上并没有创建一个名为 Categorie 的表,而是一个名为 ‘Categorie’ 的表(包括刻度)。因为您在外键约束中没有使用相同的记号,所以 MySQL 会查找一个名为 Categorie 的表而没有记号,因此无法找到供您参考的目标。

【讨论】:

    【解决方案2】:

    试试这个

    CREATE TABLE `Categorie` (
    `catID` INT(11) NOT NULL AUTO_INCREMENT,
    `naam` VARCHAR(20) NOT NULL,
    `prioriteit` INT(2) NOT NULL,
    `subCatVan` INT(11) DEFAULT NULL,
    PRIMARY KEY (`catID`),
    CONSTRAINT `subCatVan` FOREIGN KEY (`subCatVan`) REFERENCES Categorie
    
    (`catID`) ON DELETE SET NULL ON UPDATE CASCADE
    );
    

    【讨论】:

    • 请解释你的答案。
    • 你能解释一下吗?
    • @jens:现在我知道你为什么要我解释了。你在给定的帖子上发表了评论。答案与您在帖子中添加评论相同。我在给定的帖子中用反引号替换了所有刻度。抱歉,我没有看到评论。
    • @NavjotSingh 您应该在答案中写下您的解释,以便将来对所有读者有所帮助。
    猜你喜欢
    • 2017-07-16
    • 2015-01-24
    • 1970-01-01
    • 2015-02-04
    • 2016-05-15
    • 2017-09-06
    • 2018-02-08
    • 1970-01-01
    相关资源
    最近更新 更多