我有一个表,结构如下:
CREATE TABLE `child_table` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`value` int,
`ref_id` int,
PRIMARY KEY (`id`),
KEY `ref_id` (`ref_id`),
CONSTRAINT `FK4E9BF08E940F8C98` FOREIGN KEY (`ref_id`) REFERENCES `parent_table` (`id`) ON DELETE CASCADE
)
运行语句添加分区失败,显示错误:
ERROR 1217: Cannot delete or update a parent row: a foreign key constraint fails
SQL Statement:
ALTER TABLE `learning`.`child_table` PARTITION BY HASH(ref_id) PARTITIONS 10
所以我用parent_table删除外部约束,然后再次运行。它仍然失败并显示相同的错误。
我做错什么了吗?
我知道这是一个古老的问题,但是对于那些从这里寻找这个问题的人来说,因为它是谷歌的第一个结果:
MySQL不支持分区表的外键
来自手册
分区InnoDB表不支持外键。使用InnoDB存储引擎的分区表不支持外键。更具体地说,这意味着以下两个语句为真:
使用用户定义分区的InnoDB表不能包含外键引用;所有定义包含外键引用的InnoDB表都不能被分区。
InnoDB表定义中不能包含用户分区表的外键引用;
使用自定义分区的InnoDB表不能包含外键引用的列。
错误引用了引用 child_table
的另一个表上的外键。您需要从表中找到并删除外键,不一定是child_table
。你也可以先运行SET foreign_key_checks = 0