mysql分区表学习之日期分区

 更新时间:2023年08月03日 08:34:30   作者:Phil_xian  
这篇文章主要给大家介绍了关于mysql分区表学习之日期分区的相关资料,分区是一种表的设计模式,通俗地讲表分区是将一大表,根据条件分割成若干个小表,需要的朋友可以参考下

1.创建分区表

CREATE TABLE `api_log` (
  `requestId` varchar(64) NOT NULL COMMENT '调用的唯一标示',
  `systemCode` varchar(64) NOT NULL COMMENT '业务系统编码',
  `tongID` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `tong_time`  timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `pt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '分区字段',
  PRIMARY KEY (`tongID`,`requestId`,`pt`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='日志信息表'
/*!50100 PARTITION BY RANGE (TO_DAYS(pt))
(PARTITION p20230510 VALUES LESS THAN (739015) ENGINE = InnoDB,
 PARTITION p20230511 VALUES LESS THAN (739016) ENGINE = InnoDB) */;

2.查看分区

-- 01 查询单分区
 SELECT * from api_log partition (p20230510)

-- 02 查看所有分区

SELECT
    PARTITION_NAME,
    TABLE_ROWS 
FROM
    INFORMATION_SCHEMA.PARTITIONS 
WHERE
    TABLE_NAME = 'api_log';

3.添加分区

-- 添加分区
ALTER TABLE hz_api_log_delta add PARTITION (PARTITION p20230512 VALUES LESS THAN (TO_DAYS('2023-05-12')));

4.存储过程:分区删除与创建

delimiter //
CREATE  PROCEDURE `pro_create_del_pt`()
BEGIN
	#Routine body goes here...
## 01.新建后面两天的分区
## 02获取当前时间
SELECT CONCAT('p',DATE_FORMAT(DATE_ADD(NOW(),INTERVAL 2 DAY),'%Y%m%d')) into @pname;
SELECT DATE_ADD(NOW(),INTERVAL 2 DAY) into @pdate;
#删除的分区时间
SELECT  DATE_FORMAT(DATE_ADD(NOW(),INTERVAL -17 DAY) ,'%Y%m%d') into @ddate;
## 03新增分区
-- ALTER TABLE api_log add PARTITION (PARTITION p20230509 VALUES LESS THAN (TO_DAYS(DATE_ADD(NOW(),INTERVAL 1 DAY))));
		set @sql_add_p=concat("ALTER TABLE api_log add PARTITION (PARTITION ",@pname,"  VALUES LESS THAN (TO_DAYS('",@pdate,"')))");
	prepare sql_add_p from @sql_add_p;
	EXECUTE sql_add_p ;
	DEALLOCATE PREPARE sql_add_p;	
## 04 删除分区
#alter table api_log drop partition p20230507;
		set @sql_del_p=concat("ALTER TABLE api_log drop PARTITION p",@ddate);
	prepare sql_del_p from @sql_del_p;
	EXECUTE sql_del_p ;
	DEALLOCATE PREPARE sql_del_p;	
END
 //
delimiter ;

5.事件定时

-- 创建事件
delimiter $$
create event event_pro_create_del_pt
on schedule 
	every 1 DAY 
	STARTS '2023-05-10 20:00:00 '
	comment '每日20:00执行'
DO call pro_create_del_pt();
$$
delimiter ;
-- 查看事件
show events;
或者
select * from mysql.event;

6.触发器设计:子表每插入一行,总表获得一行

-- 创建事件
delimiter $$
CREATE  TRIGGER `trigger_api_log` AFTER INSERT ON `api_log` 
FOR EACH ROW BEGIN
insert into hz_api.api_log_all 
(requestId,systemCode,sjly_part) VALUES
 (NEW.requestId,NEW.systemCode,'区县');
end;
$$
delimiter ;

7.创建索引

--  创建普通索引:在tong_time字段
ALTER TABLE db_base.api_log ADD INDEX index_name ( tong_time );
-- 查看索引
show index from db_base.api_log;

8.添加枚举型字段

ALTER TABLE db_base.api_log add SJLY_PART enum('线上','线下') default null COMMENT '数据来源';

总结 

到此这篇关于mysql分区表学习之日期分区的文章就介绍到这了,更多相关mysql日期分区内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • MYSQL如何 查询数据库中所有表中的数据量

    MYSQL如何 查询数据库中所有表中的数据量

    INFORMATION_SCHEMA.TABLES 是 MySQL 中的系统表,用于存储关于数据库中的表的信息,这篇文章主要介绍了MYSQL如何 查询数据库中所有表中的数据量,需要的朋友可以参考下
    2024-01-01
  • MySQL kill指令使用指南

    MySQL kill指令使用指南

    这篇文章主要介绍了MySQL kill指令的使用方法,帮助大家更好的理解和使用MySQL,感兴趣的朋友可以了解下
    2020-12-12
  • SQL中字符串截取函数图文教程

    SQL中字符串截取函数图文教程

    在SQL的实际用途中,经常会碰到需要对查询结果值需要做字段的一些截取,下面这篇文章主要给大家介绍了关于SQL中字符串截取函数的相关资料,需要的朋友可以参考下
    2023-01-01
  • MySQL执行SQL文件报错:Unknown collation ‘utf8mb4_0900_ai_ci‘的解决方案

    MySQL执行SQL文件报错:Unknown collation ‘utf8mb4_0900_ai_

    这篇文章主要给大家分享了MySQL执行SQL文件出现【Unknown collation ‘utf8mb4_0900_ai_ci‘】的解决方案,如果又遇到相同问题的同学,可以参考阅读本文
    2023-09-09
  • 如何添加一个mysql用户并给予权限详解

    如何添加一个mysql用户并给予权限详解

    在很多时候我们并不会直接利用mysql的root用户进行项目的开发,一般我们都会创建一个具有部分权限的用户,下面这篇文章主要给大家介绍了关于如何添加一个mysql用户并给予权限的相关资料,需要的朋友可以参考下
    2023-03-03
  • 深入理解mysql SET NAMES和mysql(i)_set_charset的区别

    深入理解mysql SET NAMES和mysql(i)_set_charset的区别

    最近公司组织了个PHP安全编程的培训, 其中涉及到一部分关于Mysql的 SET NAMES 和mysql_set_charset (mysqli_set_charset)的内容
    2012-01-01
  • Mysql(MyISAM)的读写互斥锁问题的解决方法

    Mysql(MyISAM)的读写互斥锁问题的解决方法

    最近因为数据库读的请求增加,出现了比较严重的读写锁问题,由于主从分离,主服务器很快的执行完了写入的操作,但从库由于有大量的select的查询,会被这些来自主辅同步的update,insert严重堵塞,最后造成所有的Mysql从库负载迅速上升。
    2011-09-09
  • 随机生成八位优惠码并保存至Mysql数据库

    随机生成八位优惠码并保存至Mysql数据库

    这篇文章主要介绍了随机生成八位优惠码并保存至Mysql数据库的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2018-02-02
  • MySQL IFNULL判空问题解决方案

    MySQL IFNULL判空问题解决方案

    这篇文章主要介绍了MySQL IFNULL判空问题解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • 一文搞懂MySQL持久化和回滚的原理

    一文搞懂MySQL持久化和回滚的原理

    本文主要介绍了MySQL持久化和回滚的原理,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11

最新评论