创建具有分区语法错误的表:MySQL

时间:2014-02-06 09:42:55

标签: mysql sql partitioning create-table

我在使用分区创建MySQL表时遇到错误。

    CREATE TABLE employees (
    context VARCHAR(25),
    id INT
)
PARTITION BY LIST(context) (
    PARTITION pNorth VALUES IN('ads','asd')
);

它给出了:

  

ERROR 1064(42000):VALUES值必须与''asd'附近的分区函数类型相同)       )'在第6行

请帮帮我。

4 个答案:

答案 0 :(得分:3)

我认为这里的问题是您尝试在VARCHAR数据类型列上进行分区。对于LIST分区,您必须引用INTEGER类型列。来自the docs

  

MySQL中的列表分区与许多区域分区类似   方法。与RANGE分区一样,每个分区必须是显式的   定义。两种分区的主要区别在于   在列表分区中,定义并选择每个分区   基于一组值中的列值的成员资格   列表,而不是一组连续的值范围之一。   这是通过使用PARTITION BY LIST(expr)来完成的,其中expr是一列   值或基于列值的表达式并返回   整数值,然后通过VALUES定义每个分区   IN(value_list),其中value_list是以逗号分隔的列表   整数。

肯定是误导性错误!

修改

您应该注意的是按LIST COLUMNS进行分区而不是通过LIST进行分区。因此:

CREATE TABLE employees (
    context VARCHAR(25),
    id INT
)
PARTITION BY LIST COLUMNS(context) (
    PARTITION pNorth VALUES IN('ads','asd')
);

答案 1 :(得分:1)

正如@Bill Karwin指出的那样...... “在MySQL 5.1中,你只能用整数进行LIST分区。在MySQL 5.5中,他们增加了使用其他一些数据类型进行LIST COLUMNS的功能。”

答案 2 :(得分:0)

documentation for LIST partitions未提及COLUMNS作为关键字 尝试从查询中删除COLUMNS

CREATE TABLE ...
)
PARTITION BY LIST (context) (
  PARTITION pNorth VALUES IN('ads','asd')
)

答案 3 :(得分:0)

您可能会发现BY LIST在合适的INDEX上没有性能优势。

More Partition discussion