如何解决由于ERROR 1215而无法添加外键约束的MySQL错误?

时间:2015-08-04 14:30:08

标签: mysql sql foreign-keys

这是我的第一张表。

CREATE TABLE `raw_orders` (
`row_id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`order_id` VARCHAR(45) COLLATE utf8mb4_unicode_ci NOT NULL,
`order_revenue` FLOAT NOT NULL,
PRIMARY KEY(`row_id`),
KEY(`order_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

这是我的第二张表

CREATE TABLE `formatted_orders` (
`order_id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`client_order_id` VARCHAR(50) COLLATE utf8mb4_general_ci NOT NULL,
`order_revenue` FLOAT NOT NULL,
PRIMARY KEY(`order_id`),
KEY(`client_order_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

我试图在formatted_orders中添加外键,使用此

将其链接到raw_orders
ALTER TABLE formatted_orders 
ADD FOREIGN KEY (client_order_id) REFERENCES raw_orders(order_id);

但是我收到了这个错误

  

错误(HY000):无法添加外键约束

2 个答案:

答案 0 :(得分:0)

您无法添加约束的原因是您为两个表中的列指定了不同的排序规则。此外,列应该是相同的大小,虽然MySQL将允许您创建约束,即使它们不是。

更改为两列的相同排序规则(例如COLLATE utf8mb4_unicode_ci),它将起作用。

有关示例,请参阅此SQL Fiddle

MySQL documentation表示:

  

外键和引用键中的对应列必须   有类似的数据类型。整数类型的大小和符号必须是   相同。字符串类型的长度不必相同。对于   非二进制(字符)字符串列,字符集和排序规则   必须是相同的

答案 1 :(得分:0)

您只需在表formatted_orders中添加一个外键,如下所示:

CREATE TABLE `formatted_orders` (
`order_id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`client_order_id` VARCHAR(50) COLLATE utf8mb4_general_ci NOT NULL,
`order_revenue` FLOAT NOT NULL,
PRIMARY KEY(`order_id`),
FOREIGN KEY (`client_order`) REFERENCES raw_orders(`order_id`)
)