我有两个表,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是如何在两个表中显示的。

其他回答

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

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

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

我为这个损失了好几个小时!

一个表中的PK是utf8,另一个表中的PK是utf8_unicode_ci!

只是为了完成。

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

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

检查是否以正确的大小写指定了表名(如果数据库中的表名是区分大小写的)。就我而言,我必须改变

 CONSTRAINT `FK_PURCHASE_customer_id` FOREIGN KEY (`customer_id`) REFERENCES `customer` (`id`) ON UPDATE CASCADE ON DELETE CASCADE

to

 CONSTRAINT `FK_PURCHASE_customer_id` FOREIGN KEY (`customer_id`) REFERENCES `CUSTOMER` (`id`) ON UPDATE CASCADE ON DELETE CASCADE

注意客户变更为客户。

我面临这个问题,当你把主键放在不同的数据类型,比如:

表1:

 Schema::create('products', function (Blueprint $table) {
            $table->increments('id');
            $table->string('product_name');
        });

表2:

Schema::create('brands', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('brand_name');
        });

第二个表id的数据类型必须为增量