mysql-数据按月分区

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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值