创建外键时报错Referencing column ‘category_id‘ and referenced column ‘category_id‘ in foreign key constrain

博客指出创建外键约束时,若两个引用列的数据类型不同会有问题,解决办法是将这两个列的数据类型改成一样。

说明在创建外键约束的时候,你两个引用列的数据类型不一样,把两个列的数据类型改成一样就可以了

### 解决约束中引用列‘x_id’和被引用列‘ID’的问题 在 MySQL 中,约束的创建需要满足多个条件。如果出现错误“Referencing column ‘x_idand referenced columnIDin foreign key constraint are incompatible”,通常是因为以下原因之一: #### 1. 数据类型不匹配 引用列(`x_id`)和被引用列(`ID`)的数据类型必须完全一致,包括长度和精度。例如,如果 `ID` 是 `INT(11)` 类型,则 `x_id` 也必须是 `INT(11)` 类型[^1]。 #### 2. 字符集和排序规则不一致 如果引用列和被引用列是字符串类型(如 `VARCHAR` 或 `CHAR`),则它们的字符集和排序规则必须相同。例如,如果 `ID` 使用的是 `utf8mb4_general_ci` 排序规则,则 `x_id` 也必须使用相同的字符集和排序规则[^3]。 #### 3. 被引用列不是主或唯一 被引用列(`ID`)必须是主表中的主或唯一。如果 `ID` 既不是主也不是唯一,则会导致约束无法创建。解决方法是将 `ID` 设置为主或唯一[^3]。 #### 4. 表引擎不支持 MySQL 的 MyISAM 引擎不支持约束。如果表使用的是 MyISAM 引擎,则需要将其转换为 InnoDB 引擎。可以通过以下命令检查和修改表引擎: ```sql -- 检查表引擎 SHOW TABLE STATUS WHERE Name = 'your_table_name'; -- 修改表引擎为 InnoDB ALTER TABLE your_table_name ENGINE=InnoDB; ``` #### 示例代码 以下是一个正确的约束创建示例: ```sql -- 创建主表 CREATE TABLE parent ( ID INT NOT NULL, PRIMARY KEY (ID) ) ENGINE=InnoDB; -- 创建子表并添加约束 CREATE TABLE child ( x_id INT NOT NULL, FOREIGN KEY (x_id) REFERENCES parent(ID) ) ENGINE=InnoDB; ``` ### 注意事项 - 确保引用列和被引用列的数据类型、字符集和排序规则完全一致。 - 如果问题仍然存在,可以尝试删除现有的约束并重新创建。 - 在创建之前,确保所有相关表都使用 InnoDB 引擎。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值