相关文件10bet官方网站 下载本手册 从本手册中摘录

24.2.2列表分区

MySQL中的列表分区类似于在许多方面的范围分区。作为分区范围,必须明确定义每个分区。两种分区之间的主要差异是,在列表分区中,基于一组价值列表中的一个的列值的成员资格来定义和选择每个分区,而不是在一组连续范围内的一个价值观。这是通过使用完成的按列表分区(expr.在哪里expr.是基于列值的列值或表达式,并返回整数值,然后通过a借助于定义每个分区值(value_list., 在哪里value_list.是一个分隔的整数列表。

笔记

在MySQL 8.0中,可以仅匹配仅包含整数列表(并且可能空值-看第24.2.7节“MySQL分区如何处理NULL”)分配时列表

但是,可以在使用时在价值列表中使用其他列类型列表列分区,稍后在本节稍后描述。

与由范围定义的分区的情况不同,列表分区不需要以任何特定顺序声明。有关更详细的语法信息,请参阅第13.1.20节“创建表陈述”

对于以下示例,我们假设要分区的表的基本定义是由创建表在此显示的声明:

创建表员工(ID int not null,fname varchar(30),lname varchar(30),聘用日期不是null null默认值'1970-01-01',分隔日期不是null默认为'9999-12-31',Job_code int,store_id int);

(这是用作示例中的基础的相同表第24.2.1节“范围分区”。与其他分区示例一样,我们假设default_storage_engine.Innodb.。)

假设在4个特许经营中分布了20个视频存储,如下表所示。

地区 存储ID号码
3,5,6,9,17
东方的 1,2,10,11,19,20
西 4,12,13,14,18
中央 7,8,15,16

要以这样的方式分区此表,即属于同一区域的存储的行存储在同一分区中,可以使用创建表在此显示的声明:

创建表员工(ID int not null,fname varchar(30),lname varchar(30),聘用日期不是null null默认值'1970-01-01',分隔日期不是null默认为'9999-12-31',Job_code int,stort_id int)按列表(Store_ID)分区((3,5,6,9,17)中的分区PNORTH值,分区EATE值(1,2,11,19,20),分区PWEST值(4,12,13,14,18),分区pcental值(7,8,15,16));

这使得简单地添加或删除与表中的特定区域有关的员工记录。例如,假设西区的所有商店都销往另一家公司。在MySQL 8.0中,可以使用查询删除与该区域的商店中工作的员工相关的所有行ALTER表员工截断分区PWEST,这可以比等价更有效地执行删除陈述删除员工(4,12,13,14,18)的员工;。(使用ALTER表员工丢弃分区PWEST还会删除所有这些行,但也会删除分区Pwest.从桌子的定义;你需要使用一个更改表...添加分区恢复表的原始分区方案的声明。)

和人一样范围分区,可以组合列表用散列或键分区分区以生成复合分区(子分子)。看第24.2.6节“子分组”

与这种情况不同范围分区,没有抓住maxvalue.;应涵盖分区表达式的所有预期值分区...(...)中的值条款。一个包含无与伦比的分区列值的语句因错误而失败,如本示例所示:

MySQL>创建表H2( - > C1 int, - > C2 int  - >) - >按列表分区(C1)( - >分区P0值(1,4,7), - >分区P1值(2,5,8) - >);查询OK,0行影响(0.11秒)MySQL>插入H2值(3,5);错误1525(HY000):表没有值为3的分区

使用单个插入多行时声明Innodb.桌子,Innodb.考虑单个事务的语句,以便存在任何无与伦比的值,使语句完全失败,因此没有插入行。

您可以通过使用此类错误来忽略此类错误忽略关键词。如果这样做,则不会插入包含无与伦比的分区列值的行,但具有匹配值的任何行插入,没有报告错误:

mysql>截断H2;查询OK,1行受影响(0.00秒)MySQL> Select * from H2;空集(0.00秒)MySQL>插入忽略进入H2值(2,5),(6,10),(7,5),(3,1),(1,9);查询OK,3行受影响(0.00秒)记录:5重复:2警告:0 MySQL> Select *来自H2;+ ------ + ------ + |C1 |C2 |+ ------ + ------ + |7 |5 | | 1 | 9 | | 2 | 5 | +------+------+ 3 rows in set (0.00 sec)

MySQL 8.0还提供支持列表列分区,一个变体列表分区,使您可以使用除整数类型以外的类型的类型用于分区列,并使用多个列作为分区键。有关更多信息,请参阅第24.2.3.2节“列表列分区”