通过范围的方式进行分区,为每个分区给出一定的范围,范围必须是连续的并且不能重复,使用值小于操作符& lt; br/祝辞
让我们先来创建一个范围分区的表
<代码>创建表员工( ,,INT id不空, ,帧VARCHAR (30), ,,lname VARCHAR (30), ,,雇用日期NOT NULL默认& # 39;1970 - 01 - 01 & # 39;, ,,分离NOT NULL默认日期& # 39;9999 - 12 - 31日& # 39;, ,,job_code INT非空, ,store_id INT NOT NULL ) 分区的范围(可以)( ,,分区p0值小于(6), ,,分区p1值小于(11), ,,分区p2值小于(16), ,,分区p3值小于(21) );代码>
store_id小于6的,会被放入第一个分区,小于11的会放入第二个分区。你们;br>
<代码>如果我的可以大于21日怎么办呢?> 代码,所以我们得修改一下这个创建分区的方式。
<代码>创建表员工( ,,INT id不空, ,帧VARCHAR (30), ,,lname VARCHAR (30), ,,雇用日期NOT NULL默认& # 39;1970 - 01 - 01 & # 39;, ,,分离NOT NULL默认日期& # 39;9999 - 12 - 31日& # 39;, ,,job_code INT非空, ,store_id INT NOT NULL ) 分区的范围(可以)( ,,分区p0值小于(6), ,,分区p1值小于(11), ,,分区p2值小于(16), ,,分区p3值小于(21), ,,分区p4值小于(执行) );代码>
增加了一个执行,执行的意思是,大于21日的数据都会放入这个分区,当然,还有另外一种方式去避免这个问题,就是在插入的时候增加忽视关键字。你们,br/祝辞
<代码>分区键类型为时间转时间戳代码> & lt; br/祝辞
可以使用unix时间戳()
<代码>创建表quarterly_report_status ( ,,report_id INT非空, ,,report_status VARCHAR(20)非空, ,,report_updated时间戳NOT NULL违约CURRENT_TIMESTAMP CURRENT_TIMESTAMP更新 ) 范围分区(UNIX_TIMESTAMP (report_updated)) ( ,,分区p0值小于(UNIX_TIMESTAMP(& # 39; 2008-01-01就是# 39;)), ,,分区p1值小于(UNIX_TIMESTAMP(& # 39; 2008-04-01就是# 39;)), ,,分区p2值小于(UNIX_TIMESTAMP(& # 39; 2008-07-01就是# 39;)), ,,分区p3值小于(UNIX_TIMESTAMP(& # 39; 2008-10-01就是# 39;)), ,,分区p4值小于(UNIX_TIMESTAMP(& # 39; 2009-01-01就是# 39;)), ,,分区p5值小于(UNIX_TIMESTAMP(& # 39; 2009-04-01就是# 39;)), ,,分区p6值小于(UNIX_TIMESTAMP(& # 39; 2009-07-01就是# 39;)), ,,分区p7值小于(UNIX_TIMESTAMP(& # 39; 2009-10-01就是# 39;)), ,,分区p8值小于(UNIX_TIMESTAMP(& # 39; 2010-01-01就是# 39;)), ,,分区票数值小于(执行) );代码>
除了UNIX_TIMESTAMP外,其他涉及到时间戳的表达式都是不被允许的
<代码>基于时间数字的分区> 代码& lt; br/祝辞
<代码> CREATE TABLE成员( ,非空,firstname VARCHAR (25), ,不是零,lastname VARCHAR (25), ,,用户名VARCHAR(16)不是零, ,,电子邮件VARCHAR (35), ,加入日期非空 ) 范围分区(年(加入))( ,,分区p0值小于(1960), ,,分区p1值小于(1970), ,,分区p2值小于(1980), ,,分区p3值小于(1990), ,分区p4值小于MAXVALUE );代码>