背景
在我更新表字段的时候,
代码语言:javascript复制update table_name set date ='20190507'
发现报错:
代码语言:javascript复制[Err] 1526 - Table has no partition for value 20190507
分析
从报错看,partition 字段,敏感的想到,分区表。所以,看下这个表的来历(因为这个表不是我创建的)
发现这个表是根据日期字段的范围进行分区(即 四大分区类型的,Range)。
然后发现这个表最大的字段分区为20180932 (VALUES LESS THAN 中指定的值在判断时候是不包含的,所以是32号 )。
结论,就是说这个分区表不存在。
解决
创建分区表
代码语言:javascript复制ALTER TABLE table_name ADD PARTITION (PARTITION p_20190508 VALUES LESS THAN (20190508));
执行成功后:
代码语言:javascript复制受影响的行: 0
时间: 0.178s
反思
如果没有进行适当的处理,将会报错。所以在进行 RANGE 分区时,要思考这种情况。一般情况下,就时在最后添加一个 MAXVALUE 分区,如下:
代码语言:javascript复制PARTITION p_max VALUES LESS THAN MAXVALUE
参考