无法使用alter table添加分区

时间:2013-03-29 04:38:14

标签: mysql foreign-keys partitioning alter-table

我的表格结构如下:

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

我做错了吗?

2 个答案:

答案 0 :(得分:26)

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

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

来自the manual

  

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

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

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

  4.   

答案 1 :(得分:1)

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