我有两个表,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的新手


当前回答

只是为了完成。

如果你有一个VARCHAR(..)外键,并且被引用的表的字符集与引用它的表的字符集不同,也可能会出现这个错误。

例如,Latin1表中的VARCHAR(50)与UTF8表中的VARCHAR(50)不同。

其他回答

检查表格引擎,两个表格必须是相同的引擎,这对我帮助很大。

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

ALTER TABLE parent_table ENGINE=InnoDB;

我在Laravel 5.1迁移Schema Builder到MariaDB 10.1时也遇到了同样的问题。

问题是我在设置列时输入了unsigned而不是unsigned(s字母不见了)。

修复后,错别字为我修复。

定义外键的语法是非常宽容的,但对于任何其他人来说,外键必须“具有相同类型”的事实甚至适用于排序,而不仅仅是数据类型、长度和位签名。

并不是说你会在你的模型中混合排序规则(你会吗?),但如果你这样做了,确保你的主键和外键字段在phpmyadmin或Heidi SQL或其他你使用的工具中具有相同的排序规则类型。

希望这能帮你省下我花在试错上的4个小时。

对于任何和我一样在这个问题上挣扎的人来说,这就是我的问题:

我试图修改一个表,将字段从VARCHAR(16)更改为VARCHAR(255),这是引用另一个表列,其中数据类型仍然是VARCHAR(16)…