我试图创建下表,
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发布于 2012-06-12 05:29:29
有两个语法错误。试试这个密码-
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-12 04:05:37
如果这是您代码的确切副本,我认为您有一个额外的逗号。
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),
);删除最后一个逗号
https://stackoverflow.com/questions/10990194
复制相似问题