2012-10-27 60 views
3

当使用列表在MySQL中分区表时,如何为其余项目生成分区?剩余项目的列表分区

E.G:

CREATE TABLE tbl 
(
ID integer 
) 
PARTITION BY LIST (ID) 
( 
    PARTITION P1 values in (1), 
    PARTITION P2 values in (2), 
    PARTITION P3 values in (3), 
    PARTITION Pother values in (<all remaining values of ID>) 
); 

在Oracle中,我使用values in (default),但也不在MySQL的工作。

回答

2

不像range partitioning,没有“全面”的list partitioning。引用文档:

与RANGE分区的情况不同,没有像“MAXVALUE”这样的“catch-all” ;分区表达式 的所有预期值应该在PARTITION ... VALUES IN(...)子句中进行介绍。包含不匹配的分区列值的INSERT语句 失败 错误...

不幸的是,我相信,你不能够在列表和一系列分区或者合并。我不完全确定你为什么要在这个特定的实例中使用列表分区;范围分区不会工作得很好吗?

CREATE TABLE tbl 
(
ID integer 
) 
PARTITION BY RANGE (ID) 
( 
    PARTITION P1 values less than (2), 
    PARTITION P2 values less than (3), 
    PARTITION P3 values less than (4), 
    PARTITION Pother values less than maxvalue 
); 

我假设这只是一个例子。将主键中的每个键分区是没有意义的。

+0

这里是SQL小提琴:http://sqlfiddle.com/#!9/8b60e/2 –

+0

谢谢@LenielMacaferi,它似乎好像SQL小提琴现在有点破... – Ben

+0

更改MySQL版本在SQL小提琴中。看看它现在是否工作... :)这里工作。 –