这是我的第一张表。
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_ordersALTER TABLE formatted_orders
ADD FOREIGN KEY (client_order_id) REFERENCES raw_orders(order_id);
但是我收到了这个错误
错误(HY000):无法添加外键约束
答案 0 :(得分:0)
您无法添加约束的原因是您为两个表中的列指定了不同的排序规则。此外,列应该是相同的大小,虽然MySQL将允许您创建约束,即使它们不是。
更改为两列的相同排序规则(例如COLLATE utf8mb4_unicode_ci
),它将起作用。
有关示例,请参阅此SQL Fiddle。
外键和引用键中的对应列必须 有类似的数据类型。整数类型的大小和符号必须是 相同。字符串类型的长度不必相同。对于 非二进制(字符)字符串列,字符集和排序规则 必须是相同的。
答案 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`)
)