mysql的分区表

1.SQL表创建

下面以时间范围进行创建(每月一个分区,表中创建了四个月的分区)

创建: CREATE TABLE test_table ( id INT NOT NULL AUTO_INCREMENT, content VARCHAR(255), create_time DATETIME NOT NULL, PRIMARY KEY (id, create_time) ) PARTITION BY RANGE (TO_DAYS(create_time)) ( PARTITION p20240601 VALUES LESS THAN (TO_DAYS('2024-06-01')), PARTITION p20240701 VALUES LESS THAN (TO_DAYS('2024-07-01')), PARTITION p20241801 VALUES LESS THAN (TO_DAYS('2024-08-01')), PARTITION p20240901 VALUES LESS THAN (TO_DAYS('2024-09-01')) ); 查询分区详情: SELECT * FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_NAME = 'test_table';

2、mapper文件

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="*.infrastructure.mapper.TestTableMapper"> <resultMap id="TestTable" type="*.domain.entity.TestTable"> <id column="id" property="id" typeHandler="org.apache.ibatis.type.LongTypeHandler"/> <result property="content" column="content" jdbcType="VARCHAR"/> <result property="createTime" column="create_time" jdbcType="TIMESTAMP" typeHandler="org.apache.ibatis.type.LocalDateTimeTypeHandler"/> </resultMap> <!-- 创建新分区 --> <update id="createNewPartition"> ALTER TABLE TEST_TABLE ADD PARTITION ( PARTITION ${partitionName} VALUES LESS THAN (TO_DAYS(#{lessThanValue})) ) </update> <!-- 删除旧分区 --> <update id="dropPartition"> ALTER TABLE TEST_TABLE DROP PARTITION ${partitionName} </update> <!--查询是否存在分区--> <select id="exitsPartition" resultType="boolean"> SELECT COUNT(1) > 0 FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_NAME = 'TEST_TABLE' AND PARTITION_NAME = #{partitionName} </select> </mapper>

3、service

package *.domain.service; import *.domain.entity.TestTable; import *.infrastructure.repo.TestTableRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.DataAccessException; import org.springframework.stereotype.Service; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.YearMonth; import java.time.format.DateTimeFormatter; import java.util.Random; @Service public class TestTableService { @Autowired TestTableRepository repository; // 插入数据,如果分区不存在,就创建分区,重新插入 public void insert() { TestTable testTable = new TestTable(); testTable.setContent("test"); Random random = new Random(); int i = Math.abs(random.nextInt()) % 365; LocalDateTime dateTime = LocalDateTime.now().minusDays(i); testTable.setCreateTime(dateTime); try { repository.getBaseMapper().insert(testTable); } catch (DataAccessException e) { LocalDate nextMonthFirstDay = YearMonth.from(dateTime).plusMonths(1).atDay(1); String lessThanValue = nextMonthFirstDay.format(DateTimeFormatter.ISO_DATE); String partitionName = "p" + lessThanValue.replaceAll("-", ""); // 创建分区时加锁,如果是多节点,需要分布式锁 synchronized (this) { if (!repository.getBaseMapper().exitsPartition(partitionName)) { repository.getBaseMapper().createNewPartition(partitionName, lessThanValue); } } repository.getBaseMapper().insert(testTable); } } // 创建分区 public void createNewPartition(String partitionName, String lessThanValue) { repository.getBaseMapper().createNewPartition(partitionName, lessThanValue); } // 删除分区 public void dropPartition(String partitionName) { repository.getBaseMapper().dropPartition(partitionName); } }

----------------分割线-------------------------------

上述方法用代码来判断分区,新增分区,可能会引入一些奇奇怪怪的问题,因此,优化如下:

【针对mysql,使用mysql的定时事件】

1、首先确认mysql的时间调度器是否已经开启:

-- 查询事件调度器是否开启 SHOW VARIABLES LIKE 'event_scheduler'; -- 确保事件调度器已经开启 SET GLOBAL event_scheduler = ON;

2、写存储过程,用于创建新的分区, 这里是按天创建新的分区

DELIMITER // CREATE PROCEDURE `AddDailyPartition`() BEGIN DECLARE tomorrow DATE; DECLARE partition_name VARCHAR(20); -- 计算明天的日期 SET tomorrow = DATE_FORMAT(CURDATE() + INTERVAL 1 DAY, '%Y-%m-%d'); SET partition_name = CONCAT('p', DATE_FORMAT(tomorrow, '%Y%m%d')); -- 构建ALTER TABLE语句来添加分区 SET @sql = CONCAT('ALTER TABLE TEST_TABLE ', 'ADD PARTITION (PARTITION ', partition_name, ' VALUES LESS THAN (TO_DAYS('', tomorrow, '')))'); -- 执行ALTER TABLE语句 PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; END // DELIMITER ;

3、创建定时事件,调用存储过程

-- 创建定时事件 CREATE EVENT `CreateDailyPartition` ON SCHEDULE EVERY 1 DAY STARTS TIMESTAMP(CURDATE()) DO CALL AddDailyPartition();

4、查看已经创建的定时事件

SELECT * FROM information_schema.EVENTS; 在查看事件时,重要的列包括: EVENT_NAME: 事件的名称。 EVENT_SCHEMA: 事件所属的数据库。 STATUS: 事件的状态,比如是否为ENABLED或DISABLED。 STARTS: 事件开始的时间。 ENDS: 事件结束的时间(如果有设置的话)。 LAST_EXECUTED: 事件上一次执行的时间。 EVENT_DEFINITION: 事件定义,即事件中要执行的SQL语句。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1131676.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

保姆级教程:使用Dify搭建知识库+Ollama部署本地模型,零基础也能轻松上手!

本文详细介绍了两大步骤&#xff1a;首先讲解如何安装配置Dify并调整文件上传限制&#xff1b;其次指导使用Ollama部署本地模型&#xff0c;包括安装配置、监听设置及模型名称获取。通过本教程&#xff0c;读者可掌握搭建个人知识库和本地AI服务的完整流程&#xff0c;适合想要…

最新APP导航下载页系统源码 带后台

非常好看的一款App导航推荐页源码&#xff0c;带后台&#xff0c;这是一款PHP源码&#xff0c;Thinkphp框架&#xff0c;这款源码安装非常便捷干净&#xff0c;后台添加应用及轮播广告也非常方便&#xff0c;网站自适应PC手机自适应&#xff0c;喜欢的自行部署吧&#xff01;安…

AI产品经理进阶指南+大模型全栈学习路线:104G资源包助你从零到实战

文章详解AI产品经理与通用产品经理的区别、必备技能及转型路径&#xff0c;并系统介绍大模型七大学习阶段&#xff0c;从系统设计到行业应用实战。同时提供100套AI商业化方案、全套视频教程和200本PDF书籍等资源&#xff0c;帮助程序员和小白系统掌握大模型技术&#xff0c;实现…

深度学习毕设选题推荐:基于python_CNN卷积神经网络对甜点识别

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

公众号图片圆角与阴影样式配置实战(以135编辑器为例)

摘要&#xff1a;本文聚焦公众号图片圆角&#xff08;border-radius&#xff09;与阴影&#xff08;box-shadow&#xff09;样式配置的核心需求&#xff0c;以135编辑器为实操案例&#xff0c;从操作步骤、参数解析到避坑指南&#xff0c;全流程拆解可视化样式配置的实现逻辑。…

千寻运动助手V3.1小程序源码 全开源版

会员积分流量主自动化任务全功能上线基于PHPMySQL的运动步数管理助手&#xff0c;支持VIP自动任务、积分体系、流量主变现&#xff0c;打造专属健康运动小程序项目简介&#xff1a;运动健康领域的全能助手在全民健身和数字化健康管理的时代背景下&#xff0c;一款能够激励用户运…

基于C++Qt实现邮政客户投诉工单处理系统[2026-01-07]

基于CQt实现邮政客户投诉工单处理系统[2026-01-07] 项目介绍 邮政客户投诉工单处理系统是一个基于Qt框架开发的信息管理系统&#xff0c;主要用于处理邮政客户的投诉工单&#xff0c;实现了投诉工单的创建、处理、审核、统计等全流程管理。系统支持多角色权限管理&#xff0c…

《计算机网络》深入学:组帧

在计算机网络的世界里&#xff0c;物理层像是一个不知疲倦的搬运工&#xff0c;它只负责传输比特流&#xff08;0 和 1&#xff09;&#xff0c;却并不关心这些比特代表什么意义。 而数据链路层&#xff08;Data Link Layer&#xff09; 的核心任务之一&#xff0c;就是把这些…

MySQL数据误删或者误更新如何恢复(详细步骤,一看就会)

目录 本篇文章适用场景 一、下载MyFlash工具二、误删数据恢复 先检查MySQL有没有开启binlog日志演示误删除数据利用MyFlash工具 反写SQL利用mysqlbinlog 执行反写的sql二进制文件恢复完成 三、误更新数据恢复 演示误更新数据查看binlog最近的更新记录 &#xff0c;确定起始、结…

空间计算开发者技能指南 2026

空间计算时代的来临&#xff1a;定义、生态与技术共振 “空间计算”&#xff08;Spatial Computing&#xff09;不仅仅是营销术语&#xff0c;它标志着计算平台从二维屏幕向三维物理空间的范式转移。虽然 Apple 将 visionOS 定义为空间计算操作系统&#xff0c;但在更广泛的开…

通信协议仿真:通信协议基础_(7).协议仿真的工具与软件

协议仿真的工具与软件 在通信协议仿真领域,选择合适的工具和软件是至关重要的。这些工具和软件可以帮助我们更高效地设计、实现和测试通信协议。本节将详细介绍一些常用的协议仿真工具及其使用方法,包括NS-3、OMNeT++、MATLAB等。 1. NS-3 NS-3(Network Simulator 3)是一…

你画我猜计时答题对战房间酒馆互动神器H5开源

让我为您介绍这个"云起SAAS小酒馆互动H5"系统。 系统介绍 这是一个云起SAAS小酒馆互动H5系统,一个完整的双人对战游戏平台。 核心功能 1. 双人游戏模式计时答题对战: 双方同步答题,统计得分和用时,得分高且用时短者胜,输方接受惩罚你画我猜对战: 一人画一人猜,画手完…

《庄子》导读

《庄子》是战国时期道家学派的经典著作&#xff0c;由庄周及其后学共同撰写&#xff0c;全书现存 33 篇&#xff0c;分为内篇 7 篇、外篇 15 篇、杂篇 11 篇。学界普遍认为&#xff0c;内篇为庄子本人所著&#xff0c;集中体现核心思想&#xff1b;外篇、杂篇多为弟子及后学阐发…

mysql数据被误删的恢复方案

文章目录 一、使用备份恢复二、使用二进制日志&#xff08;Binary Log&#xff09;三、使用InnoDB表空间恢复四、使用第三方工具预防措施 数据误删是一个严重的数据库管理问题&#xff0c;但通过合理的备份策略和使用适当的恢复工具&#xff0c;可以有效地减少数据丢失的风险…

【复杂网络分析】从直觉上理解《Stability of graph communities across time scales》

我刚接触社区发现时,最头疼的三个问题的是:到底什么是“好社区”?不同算法的结果为啥差这么多?模块化、谱聚类这些方法看着八竿子打不着,有没有内在联系?我们组的《Stability of graph communities across time scales》这篇经典论文,把这些经典方法串成了一张逻辑自洽的…

《庄子》核心篇章的思维导图框架

一、核心篇章总览内篇&#xff08;必读&#xff0c;庄子核心思想载体&#xff09;外篇/杂篇&#xff08;选读&#xff0c;思想延伸与补充&#xff09;二、内篇&#xff08;必读&#xff09;1. 《逍遥游》核心主题&#xff1a;“无待”的绝对逍遥境界关键意象&#xff1a;大鹏、…

通信原理篇---常见的调制方式

核心思想&#xff1a;为什么要调制&#xff1f;想象你要把一份秘密情报&#xff08;信息&#xff09;送到远方。问题1&#xff1a;情报是一张纸&#xff08;低频信号&#xff09;&#xff0c;你自己跑步去送&#xff08;低频电磁波&#xff09;&#xff0c;速度慢、传不远、还容…

通信原理篇

核心思想升级&#xff1a;从“送单词”到“送句子”在之前的基础调制&#xff08;ASK、FSK、BPSK&#xff09;中&#xff0c;我们一次只送1个比特&#xff08;一个0或一个1&#xff09;。这就像每次派一架飞机&#xff0c;只送一个字母&#xff0c;效率太低了。高阶调制的目标就…

亲测好用!专科生毕业论文必备的8款一键生成论文工具测评

亲测好用&#xff01;专科生毕业论文必备的8款一键生成论文工具测评 专科生论文写作的痛点与测评思路 随着高校教育的不断普及&#xff0c;越来越多的专科生面临毕业论文撰写的压力。在实际操作中&#xff0c;许多学生会遇到选题困难、资料查找繁琐、格式不规范、语言表达不够专…

AGV 无人叉车在物流搬运中的核心优势

在物流成本上升、安全要求趋严的背景下&#xff0c;无人叉车已成为内部物流自动化的核心装备&#xff0c;正彻底改变传统仓储和物料搬运的运作模式。 AiTEN海豚之星作为全球领先的无人叉车与内部物流自动化解决方案提供商&#xff0c;依托全产品矩阵、自研核心技术与成熟交付能…