我在使用分区创建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行
请帮帮我。
答案 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上没有性能优势。