我的表格结构如下:
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删除外部约束,然后再次运行。它仍然失败并显示相同的错误。
我做错了吗?
答案 0 :(得分:26)
我知道这是一个古老的问题,但是对于那些来自这里寻找这个问题的人来说,因为它是谷歌的第一个结果:
分区的InnoDB表不支持外键。使用InnoDB存储引擎的分区表不支持外键。更具体地说,这意味着以下两个陈述是正确的:
使用用户定义分区的InnoDB表的定义可能不包含外键引用;没有InnoDB表,其定义包含外键引用,可以进行分区。
- 醇>
没有InnoDB表定义可能包含对用户分区表的外键引用;没有带有用户定义分区的InnoDB表可能包含外键引用的列。
答案 1 :(得分:1)
错误是指另一个引用 child_table
的表上的外键。您需要从 表中查找并删除外键,而不一定是child_table
。您也可以先尝试运行SET foreign_key_checks = 0
。