文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

MySQL按时间进行表分区的方法代码

2024-09-29 19:55

关注

创建按月份分区的表

create table if not exists table_name
(
    id          bigint auto_increment comment '主键id',
    
    create_by   varchar(64)                        not null comment '创建者',
    create_time datetime default CURRENT_TIMESTAMP not null comment '创建时间',
    update_by   varchar(64)                        null comment '更新者',
    update_time datetime default CURRENT_TIMESTAMP null on update CURRENT_TIMESTAMP comment '更新时间',
    primary key (id, create_time)
)
    comment '测试表名' partition by range (TO_DAYS(create_time)) (
    partition P202401 values less than (TO_DAYS('2024-02-01')) ,
    partition P202402 values less than (TO_DAYS('2024-03-01')) ,
    partition P202403 values less than (TO_DAYS('2024-04-01')) ,
    partition P202404 values less than (TO_DAYS('2024-05-01'))
);

开启数据库事件

临时配置(服务重启会失效)

-- 开启事件
SET GLOBAL event_scheduler = ON;
-- 查看事件是否开启
SHOW VARIABLES LIKE '%event_sche%';

修改my.cnf文件(推荐)

sudo vi /etc/my.cnf
event_scheduler = ON
sudo systemctl restart mysqld

定时事件自动建分区

create event event_create_partition on schedule
    every '1' MONTH starts '2024-04-01 00:00:00'
    on completion preserve
    enable 
    do 
    BEGIN
    
    	-- 当前时间 2024-04-01 00:00:00
		-- _DATE = 2024-05-01
    	DECLARE _DATE VARCHAR(10) DEFAULT ADDDATE(SUBDATE(CURDATE(), DAY(CURDATE()) - 1), INTERVAL 1 MONTH);
    	-- P202405
    	SET @PARTITION_NAME = CONCAT('P', DATE_FORMAT(_DATE, '%Y%m'));
    	-- 2024-06-01
    	SET @SHEAR_DATE = CONCAT('', ADDDATE(LAST_DAY(_DATE), 1));
    	
        SET @SQL = CONCAT('ALTER TABLE table_name ADD PARTITION (PARTITION ', @PARTITION_NAME, ' VALUES LESS THAN (TO_DAYS("', @SHEAR_DATE, '")))');
        PREPARE STMT FROM @SQL;
        EXECUTE STMT;
        DEALLOCATE PREPARE STMT;

    END;

注意: 数据库event_scheduler = ON 要确认有开启,否则 event_create_partition 事件不会执行。

SHOW EVENTS;

查询表分区信息

SELECT
   TABLE_SCHEMA,
   TABLE_NAME,
   PARTITION_NAME,
   PARTITION_METHOD,
   PARTITION_EXPRESSION,
   SUBPARTITION_NAME,
   SUBPARTITION_METHOD,
   SUBPARTITION_EXPRESSION
FROM information_schema.partitions
WHERE TABLE_SCHEMA = '数据库名'
AND TABLE_NAME IN ('table_name')
ORDER BY PARTITION_NAME DESC;

总结 

到此这篇关于MySQL按时间进行表分区的文章就介绍到这了,更多相关MySQL按时间表分区内容请搜索编程网(www.lsjlt.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.lsjlt.com)!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯