使用alter table添加分区失败。

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

我做错了什么吗?


你确定 child_table 没有作为外键在其他表中使用吗? - Explosion Pills
不,它只有一个外键。在第一次失败的消息后,我已将其完全删除。 - Tu Tran
我不是指在child_table上的外键,而是指在另一个表上的外键,该表链接到child_table - Explosion Pills
好的,谢谢。对此感到抱歉。我已经解决了那个错误,但又出现了另一个。不过我认为我可以解决它。 - Tu Tran
2个回答

32

我知道这是一个老问题,但为了那些从谷歌搜索此问题跳转到此的人们,因为这是谷歌的第一个结果:

MySQL不支持在分区表上使用外键。

来自手册

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

  1. 不允许定义使用用户定义分区的InnoDB表包含外键引用;不允许分区的InnoDB表其定义包含外键引用。

  2. 不允许InnoDB表定义包含对用户分区表的外键引用;不允许使用用户定义分区的InnoDB表包含被外键引用的列。


0
错误是指另一张表上的外键引用了 child_table。您需要找到并从那个表中删除外键,而不一定是 child_table。您也可以尝试先运行 SET foreign_key_checks = 0。

2
我尝试使用 SET foreign_key_checks = 0,但它没有起作用。我必须删除所有引用到 child_table 的外键。 - Tu Tran

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接