记录|关于创建外键并和另一张表进行关联的时候报错问题解决


前言

参考文章:

本以为是正常的外键设置,同时进行外键关联的操作。没想到有坑。


一、问题描述

product_info表

表中有个product_QR_code项,是我新建的order_info中需要关联的。即,需要通过order_info中的产品图号去关联product_info表中的product_QR_code。
我的order_info表的sql语句为:

CREATE TABLE order_info(
   `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '订单id',
   `product_QR_code` VARCHAR(255) NOT NULL COMMENT '产品图号',
   PRIMARY KEY(`id`),
   FOREIGN KEY(`product_QR_code`) REFERENCES product_info(`product_QR_code`)
);

但是报错误为:1215 - Cannot add foreign key constraint


二、问题解决

分析

错误1215 - Cannot add foreign key constraint通常发生在以下几种情况:

  • 数据类型不匹配:外键列和被引用的主键列的数据类型必须完全相同。
  • 字符集或排序规则不一致:两个表的字符集或排序规则需要一致。
  • 存储引擎不支持:确保两个表都使用支持外键约束的存储引擎(如InnoDB)。
  • 被引用的列不是主键或唯一键:在product_info表中,product_QR_code列必须是唯一的或者作为主键的一部分。
    而我的product_info表定义中,product_QR_code列是一个普通索引,而不是主键或唯一键。因此,不能直接将其用作外键。

解决方案

可以将product_QR_code列改为唯一键,或者创建一个新的唯一键列来作为外键。

方法一:将product_QR_code列改为唯一键

ALTER TABLE `product_info` ADD UNIQUE (`product_QR_code`);

方法二:添加一个新的唯一键列用于外键

ALTER TABLE `product_info` ADD COLUMN `unique_product_qr_code` VARCHAR(255) NOT NULL;
ALTER TABLE `product_info` ADD UNIQUE (`unique_product_qr_code`);

然后创建order_info表:

CREATE TABLE order_info(
   `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '订单id',
   `product_QR_code` VARCHAR(255) NOT NULL COMMENT '产品图号',
   PRIMARY KEY(`id`),
   FOREIGN KEY(`product_QR_code`) REFERENCES product_info(`unique_product_qr_code`)
);


更新时间

  • 2024.10.22:创建

猜你喜欢

转载自blog.csdn.net/qq_41714549/article/details/143156690