我有两个表,table1是一个列ID的父表,table2是一个列IDFromTable1(不是实际的名称),当我把一个FK IDFromTable1到ID在table1,我得到的错误外键约束是不正确形成的错误。我想删除表2记录,如果表1记录被删除。谢谢你的帮助

ALTER TABLE `table2`  
   ADD CONSTRAINT `FK1` 
      FOREIGN KEY (`IDFromTable1`) REFERENCES `table1` (`ID`) 
      ON UPDATE CASCADE 
      ON DELETE CASCADE;

如果还需要其他信息,请告诉我。我是mysql的新手


当前回答

我在使用Alter table在两个表之间添加外键时遇到了问题,帮助我的是确保我试图添加外键关系的每一列都被索引。在PHP myAdmin中这样做: 转到表并单击结构选项卡。 点击索引选项可以索引所需的列,如下图所示:

一旦我索引了我试图用外键引用的两列,我就能够成功地使用alter表并创建外键关系。你会看到列的索引如下面的截图:

注意zip_code是如何在两个表中显示的。

其他回答

即使字段名和数据类型相同,但排序规则不相同,也会导致该问题。

例如

资源描述 name | data 类型           | 排序 ActivityID           |         INT                         | latin1_general_ci ActivityID           |         INT                         | utf8_general_ci

试着把它变成

资源描述 name | data 类型           | 排序 ActivityID           |         INT                         | latin1_general_ci ActivityID           |         INT                         | latin1_general_ci

....

这对我很管用。

确保列是相同的(相同类型),如果引用列不是primary_key,确保它是INDEXED。

我也有同样的问题。

问题是参考列不是主键。

把它设为主键,问题就解决了。

当使用MyISAM引擎创建父表时,我也遇到了同样的问题。这是一个愚蠢的错误,我用:

ALTER TABLE parent_table ENGINE=InnoDB;

我在使用HeidiSQL时也遇到了同样的问题。您收到的错误非常神秘。我的问题是外键列和引用列的类型或长度不相同。

外键列是SMALLINT(5) UNSIGNED,引用列是INT(10) UNSIGNED。一旦我将它们都设置为完全相同的类型,外键的创建就会完美地工作。