MYSQL 按照时间的年月分区
建表语句
CREATE TABLE sales_records (
id INT(11) NOT NULL AUTO_INCREMENT,
sale_date DATE NOT NULL,
amount DECIMAL(10, 2) NOT NULL,
PRIMARY KEY (id, sale_date)
) ENGINE=InnoDB
PARTITION BY RANGE ( YEAR(sale_date) * 100 + MONTH(sale_date) ) (
PARTITION sales_records_202101 VALUES LESS THAN (202102), -- 包含2021年1月的数据
PARTITION sales_records_202102 VALUES LESS THAN (202103) -- 包含2021年2月的数据
);
判断是否存在分区
SELECT
PARTITION_NAME
FROM
INFORMATION_SCHEMA.PARTITIONS
WHERE TABLE_NAME = 'sales_records'
AND PARTITION_NAME = 'sales_records_202101';
创建分区
ALTER TABLE sales_records ADD PARTITION (
PARTITION sales_records_202103 VALUES LESS THAN (202203) -- 修改为你的分区参数
);
需要注意 :
1.新建分区时间不能小于以前存在的分区
(VALUES LESS THAN value must be strictly increasing for each partition)
2.如果存在PRIMARY KEY或者唯一索引分区键必须再相关索引里面
(A PRIMARY KEY must include all columns in the table’s partitioning function)
3.如果要新建分区,建表的时候就必须有PARTITION BY RANGE()
(VALUES LESS THAN value must be strictly increasing for each partition)
4.注意 是less than 如果插入的数据 是202203 这个会报错
(MYSQL Table has no partition for value 202303)