MySQL如何设置外键约束cannot add foreign key constraint设置外键约束失败原因

本文详细解析了在MySQL中使用InnoDB表建立外键的SQL语法,包括外键约束的类型如CASCADE、RESTRICT、SETNULL,以及建立外键的条件和常见失败原因。强调了字段数据类型、编码的一致性和索引的重要性。

建立外键SQL语法

ALTER TABLE yourtablename
    ADD [CONSTRAINT 外键名] FOREIGN KEY [id] (index_col_name, ...)
    REFERENCES tbl_name (index_col_name, ...)
    [ON DELETE {CASCADE | SET NULL | NO ACTION | RESTRICT}]
    [ON UPDATE {CASCADE | SET NULL | NO ACTION | RESTRICT}]

说明:
on delete/on update,用于定义delete,update操作.以下是update,delete操作的各种约束类型:
CASCADE:
外键表中外键字段值会被更新,或所在的列会被删除.
RESTRICT:
RESTRICT也相当于no action,即不进行任何操作.即,拒绝父表update外键关联列,delete记录.
SET NULL:
被父面的外键关联字段被update ,delete时,子表的外键列被设置为null.
而对于insert,子表的外键列输入的值,只能是父表外键关联列已有的值.否则出错.

外键建立条件:

1)所有tables必须是InnoDB型,它们不能是临时表.因为在MySQL中只有InnoDB类型的表才支持外键.
2)所有要建立外键的字段必须建立索引.
3)对于非InnoDB表,FOREIGN KEY子句会被忽略掉。

常见的建立外键失败原因

1、要设置外键的字段不能为主键

2、改建所参考的字段必须为主键

3、两个字段必须具有相同的数据类型和约束

4、(最难发现的原因)两个字段的编码必须一致
查看字段编码,SQLYog举例
首先去掉勾选【隐藏语言选项】
在这里插入图片描述

接着在这里可以查看到字段编码
在这里插入图片描述
注意:即使你修改了表的编码,字段的编码也不会跟着被修改,还是得打开更改表选项一个个进行改动

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值