【问题标题】:Create table with partition syntax error : MySQL创建带有分区语法错误的表:MySQL
【发布时间】:2014-03-03 04:06:33
【问题描述】:

我在创建带有分区的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 行

请帮帮我。

【问题讨论】:

标签: mysql sql partitioning create-table


【解决方案1】:

我认为这里的问题是您试图在 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')
);

【讨论】:

  • @Deepshikha, .. 但是这个文档中给出的第一个例子怎么样。 > dev.mysql.com/doc/refman/5.5/en/partitioning-columns-list.html 。看来 value_list 在此包含字符串。
  • +1 正确。在 MySQL 5.1 中,您只能对整数进行 LIST 分区。在 MySQL 5.5 中,他们添加了使用其他数据类型执行 LIST COLUMNS 的功能。建议阅读文档。
【解决方案2】:

documentation for LIST partitions 没有提到 COLUMNS 作为关键字。
尝试从您的查询中删除 COLUMNS

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

【讨论】:

【解决方案3】:

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

【讨论】:

    【解决方案4】:

    您可能会发现 BY LIST 与合适的 INDEX 相比没有性能优势。

    More Partition discussion.

    【讨论】:

      猜你喜欢
      • 2014-04-09
      • 2016-02-07
      • 2014-05-17
      • 1970-01-01
      • 2012-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-14
      相关资源
      最近更新 更多