向MySQL表添加约束

时间:2011-04-23 00:10:51

标签: mysql

我有两个名为Students的表和一个名为Grades的表,我正在尝试将一个外键约束添加到Grades表中,这样如果有人从Students表中删除,他们的所有成绩也将被删除。我有一个名为TNumber的列来匹配2.这是我目前为止的代码。

    ALTER TABLE Grades
    ADD CONSTRAINT fk_Grades
    FOREIGN KEY (TNumber)
    REFERENCES Students(TNumber) ON DELETE CASCADE;

问题是代码运行但它不会创建外键。 有人可以看看它,看看我的语法是否有问题,因为代码运行并且没有任何错误。

1 个答案:

答案 0 :(得分:4)

最可能的原因(以及评论中暗示的那个)假设语句没有错误地完成但似乎没有效果是一个或两个表使用MyISAM引擎,这通常是默认的。两个表都需要使用支持外键的引擎,例如InnoDB。

如果您的表是MyISAM表,则可以convert them to InnoDB表包含以下内容:

ALTER TABLE Students Engine=InnoDB;
ALTER TABLE Grades Engine=InnoDB;

之后,再次尝试添加外键。抬头:外键约束中的列需要具有相同的类型。如果存在差异,您将收到极其无用的“E RROR 1005 (HY000): Can't create table filename (errno: 150)”错误消息。

请注意,除了允许外键限制外,使用InnoDB引擎还有consequences(另请参阅“Storage Engine Performance Benchmark for MyISAM and InnoDB”以及web search可能出现的任何内容),但大多数都是有益的。