2014-09-26 57 views
-1

请你能告诉我的问题与此查询:这个MySQL分区查询有什么错误?

ALTER TABLE 
    `phar_bills` 
PARTITION BY RANGE COLUMNS (YEAR(bill_date)) 
( 
    PARTITION p0 VALUES LESS THAN (2014), 
    PARTITION p1 VALUES LESS THAN (2015), 
    PARTITION p2 VALUES LESS THAN (2016), 
    PARTITION p3 VALUES LESS THAN (2017), 
    PARTITION p4 VALUES LESS THAN (2018), 
    PARTITION p5 VALUES LESS THAN (2019), 
    PARTITION p6 VALUES LESS THAN (2020), 
    PARTITION p7 VALUES LESS THAN (2021), 
    PARTITION p8 VALUES LESS THAN (2022), 
    PARTITION p9 VALUES LESS THAN (2023), 
    PARTITION p10 VALUES LESS THAN (2024), 
    PARTITION p11 VALUES LESS THAN (2025), 
    PARTITION p12 VALUES LESS THAN (2026), 
    PARTITION p13 VALUES LESS THAN (2027), 
    PARTITION p14 VALUES LESS THAN (2028), 
    PARTITION p15 VALUES LESS THAN (2029), 
    PARTITION p16 VALUES LESS THAN (2030) 
) 
SUBPARTITION BY LIST COLUMNS(pharmacy_code) 
( 
    PARTITION phar1 VALUES IN('1'), 
    PARTITION phar2 VALUES IN('2'), 
    PARTITION phar3 VALUES IN ('3') 
) 

回答

0

什么字RANGE和分区表达式之间COLUMNS的目的是什么?

BY RANGE COLUMNS (YEAR(bill_date)) 
      ^^^^^^^ 

在那里做的塑料是什么?我不相信这是有效的语法,但也许你正在运行更新版本的MySQL。

YEAR(bill_date)是一个表达式,而不是列的名称。

据到MySQL 5.5参考手册:

"RANGE COLUMNS does not accept expressions, only names of columns." 

参考:http://dev.mysql.com/doc/refman/5.5/en/partitioning-columns-range.html


但是,如果这不是有效的语法,我们就完全有理由相信MySQL来抛出一个错误,最有可能的, “#1064您的语法错误”。

除此之外,还有各种其他可能的问题......但我们希望大多数人也会抛出一个实际的MySQL错误信息。 “未启用分区”,“存储引擎不支持分区”,“分区表不支持的外键”等等。