6

我有一个结构如下表:

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 删除了外部约束,然后再次运行。它仍然失败并显示相同的错误。

我做错什么了吗?

4

2 回答 2

30

我知道这是一个老问题,但对于那些因寻找这个问题而落入这里的人来说,因为它是第一个谷歌结果:

MySQL 不支持分区表上的外键。

手册

分区 InnoDB 表不支持外键。 使用 InnoDB 存储引擎的分区表不支持外键。更具体地说,这意味着以下两个陈述是正确的:

  1. 使用用户定义分区的 InnoDB 表的定义不能包含外键引用;不能对其定义包含外键引用的 InnoDB 表进行分区。

  2. 没有 InnoDB 表定义可能包含对用户分区表的外键引用;没有用户定义分区的 InnoDB 表可能包含外键引用的列。

于 2014-01-09T16:01:37.047 回答
1

该错误是指另一个表上引用 child_table的外键。您需要从表中查找并删除外键,不一定child_table。你也可以SET foreign_key_checks = 0先试试跑步。

于 2013-03-29T04:56:10.777 回答