1

我正在尝试创建下表,

CREATE TABLE IF NOT EXISTS `hashes` (
    `hash` binary(20) NOT NULL,
    `name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
    `category` tinyint(1) unsigned NOT NULL DEFAULT '0',
    `indexed` tinyint(1) unsigned NOT NULL DEFAULT '0',
    `dcma` tinyint(1) unsigned NOT NULL DEFAULT '0',
    PRIMARY KEY (`hash`),
    KEY `category` (`category`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci,
PARTITION BY LIST(`category`)( 
    PARTITION p0 VALUES IN(0), 
    PARTITION p1 VALUES IN(1), 
    PARTITION p2 VALUES IN(2), 
    PARTITION p3 VALUES IN(3),
    PARTITION p4 VALUES IN(4),
    PARTITION p5 VALUES IN(5),
    PARTITION p6 VALUES IN(6),
);

分区用于category它所在的列tinyint(1),每个数字对应一个类别。据我了解,我不能按枚举分区,但我认为这种方式可行吗?

我哪里错了?

编辑

错误如下,

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'PARTITION BY LIST(`category`)( PARTITION p0 VALUES IN(0), PARTITION ' at line 10
4

2 回答 2

2

有两个语法错误。试试这个代码 -

    CREATE TABLE IF NOT EXISTS `hashes`(
      `hash` BINARY(20) NOT NULL,
      `name` VARCHAR(255) COLLATE utf8_unicode_ci DEFAULT NULL,
      `category` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0',
      `indexed` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0',
      `dcma` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0',
--      PRIMARY KEY (`hash`),
      KEY `category` (`category`)
    )
    ENGINE = INNODB
    DEFAULT CHARSET = utf8
    COLLATE = utf8_unicode_ci
    PARTITION BY LIST (`category`) (
      PARTITION p0 VALUES IN (0),
      PARTITION p1 VALUES IN (1),
      PARTITION p2 VALUES IN (2),
      PARTITION p3 VALUES IN (3),
      PARTITION p4 VALUES IN (4),
      PARTITION p5 VALUES IN (5),
      PARTITION p6 VALUES IN (6)
    );

请注意,我已经注释掉了主键定义。分区有一些限制,其中之一 -分区表的分区表达式中使用的所有列必须是该表可能具有的每个唯一键的一部分。换句话说,表上的每个唯一键都必须使用表分区表达式中的每一列。

此处的更多信息 -分区键、主键和唯一键

于 2012-06-12T05:29:29.687 回答
0

如果这是您的代码的精确副本,我认为您有一个额外的逗号。

PARTITION BY LIST(`category`)( 
  PARTITION p0 VALUES IN(0), 
  PARTITION p1 VALUES IN(1), 
  PARTITION p2 VALUES IN(2), 
  PARTITION p3 VALUES IN(3),
  PARTITION p4 VALUES IN(4),
  PARTITION p5 VALUES IN(5),
  PARTITION p6 VALUES IN(6),
);

去掉最后一个逗号

于 2012-06-12T04:05:37.003 回答