iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >MySQL如何实现清空分区表单个分区数据
  • 465
分享到

MySQL如何实现清空分区表单个分区数据

2023-07-05 11:07:54 465人浏览 八月长安
摘要

这篇“MySQL如何实现清空分区表单个分区数据”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Mysql如何实现清空分区表单个

这篇“MySQL如何实现清空分区表单个分区数据”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Mysql如何实现清空分区表单个分区数据”文章吧。

    mysql清空分区表单个分区数据

    1.单个分区清空

    ALTER TABLE xxx TRUNCATE PARTITioN p20220104;

    2.编辑存储过程

    功能:指定清空之前某一天的数据,直接调用存储过程实现

    DELIMITER $$ USE `managerdb`$$ DROP PROCEDURE IF EXISTS `partition_trunc`$$ CREATE DEFINER=`root`@`localhost` PROCEDURE `partition_trunc`(p_schema_name VARCHAR(64), p_table_name VARCHAR(64), p_trunc_before_date INT)BEGIN              DECLARE trunc_part_name VARCHAR(16);        SET trunc_part_name = CONCAT('p',DATE_FORMAT(DATE_SUB(CURDATE(),INTERVAL p_trunc_before_date DAY),'%Y%m%d'));        SET @trunc_partitions = CONCAT("ALTER TABLE ", p_schema_name, ".", p_table_name, " TRUNCATE PARTITION ",trunc_part_name); -- 拼执行语句SELECT @trunc_partitions; -- 打印删除详情                 PREPARE STMT FROM @trunc_partitions;                         EXECUTE STMT;                         DEALLOCATE PREPARE STMT;        END$$ DELIMITER ;

    实例:

    call managerdb.partition_trunc('test','t_001',1);

    清空test.t_001一天前的单个分区数据

    Mysql自动分区自动清理

    mysql分区表功能特别有用,其中一个应用就是保存固定时间的数据信息,自动分区自动purge,不用担心数据量越积累越多。

    比较实用的一个实现方式是表一天一个分区,保持固定天数的数据。

    完整的SQL

    数据库log为例,里面有一个表tb_log, 按天分区,始终保存最新的30天的数据。

    存储过程sp_create_log_partition和sp_drop_log_partition用于创建和删除分区。

    事件event_log_auto_partition每天执行一次,用于向前创建新的分区和删除过期的分区。

    存储过程和事件结合使用就实现了tb_log数据的自动分区自动删除。

    ---- Definition for database log--DROP DATABASE IF EXISTS log;CREATE DATABASE IF NOT EXISTS loGCHARACTER SET utf8COLLATE utf8_general_ci; -- -- Set default database--USE log; ---- Definition for table tb_log--CREATE TABLE IF NOT EXISTS tb_log (  id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT,  created_at datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,  log varchar(512) NOT NULL DEFAULT '',  PRIMARY KEY (id, created_at))ENGINE = INNODBAUTO_INCREMENT = 1AVG_ROW_LENGTH = 16384CHARACTER SET utf8mb4COLLATE utf8mb4_general_ciPARTITION BY RANGE(TO_DAYS(created_at))(PARTITION pbasic VALUES LESS THAN (0)); DELIMITER $$ ---- Definition for procedure sp_create_log_partition--CREATE DEFINER = 'uiadmin'@'%'PROCEDURE sp_create_log_partition (day_value datetime, tb_name varchar(128))BEGIN  DECLARE par_name varchar(32);  DECLARE par_value varchar(32);  DECLARE _err int(1);  DECLARE par_exist int(1);  DECLARE CONTINUE HANDLER FOR SQLEXCEPTION, SQLWARNING, NOT FOUND SET _err = 1;  START TRANSACTION;    SET par_name = CONCAT('p', DATE_FORMAT(day_value, '%Y%m%d'));    SELECT      COUNT(1) INTO par_exist    FROM information_schema.PARTITIONS    WHERE TABLE_SCHEMA = 'log' AND TABLE_NAME = tb_name AND PARTITION_NAME = par_name;    IF (par_exist = 0) THEN      SET par_value = DATE_FORMAT(day_value, '%Y-%m-%d');      SET @alter_sql = CONCAT('alter table ', tb_name, ' add PARTITION (PARTITION ', par_name, ' VALUES LESS THAN (TO_DAYS("', par_value, '")+1))');      PREPARE stmt1 FROM @alter_sql;      EXECUTE stmt1;    END IF;  END  $$ ---- Definition for procedure sp_drop_log_partition--CREATE DEFINER = 'uiadmin'@'%'PROCEDURE sp_drop_log_partition (day_value datetime, tb_name varchar(128))BEGIN  DECLARE str_day varchar(64);  DECLARE _err int(1);  DECLARE done int DEFAULT 0;  DECLARE par_name varchar(64);  DECLARE cur_partition_name CURSOR FOR  SELECT    partition_name  FROM INFORMATION_SCHEMA.PARTITIONS  WHERE TABLE_SCHEMA = 'log' AND table_name = tb_name  ORDER BY partition_ordinal_position;  DECLARE CONTINUE HANDLER FOR SQLEXCEPTION, SQLWARNING, NOT FOUND SET _err = 1;  DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;  SET str_day = DATE_FORMAT(day_value, '%Y%m%d');  OPEN cur_partition_name;  REPEAT    FETCH cur_partition_name INTO par_name;    IF (str_day > SUBSTRING(par_name, 2)) THEN      SET @alter_sql = CONCAT('alter table ', tb_name, ' drop PARTITION ', par_name);      PREPARE stmt1 FROM @alter_sql;      EXECUTE stmt1;    END IF;  UNTIL done END REPEAT;  CLOSE cur_partition_name;END$$ ---- Definition for event event_log_auto_partition--CREATEDEFINER = 'uiadmin'@'%'EVENT event_log_auto_partitionON SCHEDULE EVERY '1' DAYSTARTS '1972-01-01 00:00:00'ON COMPLETION PRESERVEDOBEGIN  CALL sp_create_log_partition(DATE_ADD(NOW(), INTERVAL - 3 DAY), 'tb_log');  CALL sp_create_log_partition(DATE_ADD(NOW(), INTERVAL - 2 DAY), 'tb_log');  CALL sp_create_log_partition(DATE_ADD(NOW(), INTERVAL - 1 DAY), 'tb_log');  CALL sp_create_log_partition(NOW(), 'tb_log');  CALL sp_create_log_partition(DATE_ADD(NOW(), INTERVAL 1 DAY), 'tb_log');  CALL sp_create_log_partition(DATE_ADD(NOW(), INTERVAL 2 DAY), 'tb_log');  CALL sp_create_log_partition(DATE_ADD(NOW(), INTERVAL 3 DAY), 'tb_log');  CALL sp_drop_log_partition(DATE_ADD(NOW(), INTERVAL - 30 DAY), 'tb_log'); END$$ ---- Create partitions based on current time--CALL sp_create_log_partition(DATE_ADD(NOW(), INTERVAL - 3 DAY), 'tb_log')$$CALL sp_create_log_partition(DATE_ADD(NOW(), INTERVAL - 2 DAY), 'tb_log')$$CALL sp_create_log_partition(DATE_ADD(NOW(), INTERVAL - 1 DAY), 'tb_log')$$CALL sp_create_log_partition(NOW(), 'tb_log')$$CALL sp_create_log_partition(DATE_ADD(NOW(), INTERVAL 1 DAY), 'tb_log')$$CALL sp_create_log_partition(DATE_ADD(NOW(), INTERVAL 2 DAY), 'tb_log')$$CALL sp_create_log_partition(DATE_ADD(NOW(), INTERVAL 3 DAY), 'tb_log')$$ DELIMITER ;

    查看分区

    select TABLE_SCHEMA, TABLE_NAME,PARTITION_NAME from INFORMATION_SCHEMA.PARTITIONS where TABLE_SCHEMA='log' and table_name='tb_log';

    MySQL如何实现清空分区表单个分区数据

    在磁盘上一个分区表现为一个文件,所以删除操作会很快完成的。

    MySQL如何实现清空分区表单个分区数据

    以上就是关于“MySQL如何实现清空分区表单个分区数据”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网数据库频道。

    您可能感兴趣的文档:

    --结束END--

    本文标题: MySQL如何实现清空分区表单个分区数据

    本文链接: https://www.lsjlt.com/news/351441.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    本篇文章演示代码以及资料文档资料下载

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档
    猜你喜欢
    • MySQL如何实现清空分区表单个分区数据
      这篇“MySQL如何实现清空分区表单个分区数据”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“MySQL如何实现清空分区表单个...
      99+
      2023-07-05
    • MySQL实现清空分区表单个分区数据
      目录mysql清空分区表单个分区数据1.单个分区清空2.编辑存储过程MySQL自动分区自动清理完整的SQL查看分区总结MySQL清空分区表单个分区数据 1.单个分区清空 ALTER TABLE xxx TRUN...
      99+
      2023-03-13
      MySQL清空分区表 MySQL分区数据 MySQL分区表
    • mysql如何删除分区表数据
      要删除分区表的数据,可以使用以下语法: DELETE FROM table_name PARTITION (partitio...
      99+
      2024-04-15
      MySQL
    • PHP如何实现MySQL数据库分区
      本篇内容介绍了“PHP如何实现MySQL数据库分区”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、MySQL数据库分区MySQL数据库分区...
      99+
      2023-07-06
    • 如何在MySQL中实现分表和分区
      如何在MySQL中实现分表和分区?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。垂直分表垂直分表就是一个包含有很多列的表拆分成多...
      99+
      2024-04-02
    • sql如何删除分区表的分区数据
      要删除分区表的分区数据,可以使用以下SQL语句: ALTER TABLE table_name DROP PARTITION par...
      99+
      2024-04-09
      sql
    • layui如何实现清空和重置表单数据
      这篇文章给大家分享的是有关layui如何实现清空和重置表单数据的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。最近在使用layui框架,在页面进行表单数据提交后,要是页面表单数据清...
      99+
      2024-04-02
    • MySQL对数据表已有表进行分区表的实现
      目录操作方式操作过程对现有的一个表进行创建分区表,并把数据迁移到新表,可以按时间来分区,然后这表不是实时更新,每天有一次插入操作。 时间比较充裕,但是服务器上有其他应用,使用较小资源...
      99+
      2024-04-02
    • 数据库中分区表如何删除分区、分区对应的tablespace、datafile
      这篇文章给大家分享的是有关数据库中分区表如何删除分区、分区对应的tablespace、datafile的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 ...
      99+
      2024-04-02
    • mysql如何给表创建一个分区
      在MySQL中,可以使用CREATE TABLE语句来创建一个分区表。以下是一个示例: CREATE TABLE employee ...
      99+
      2024-04-20
      mysql
    • PLSQL如何根据分区表的分区名批量truncate分区
      这篇文章将为大家详细讲解有关PLSQL如何根据分区表的分区名批量truncate分区,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。关于“PLSQL如何根据分区表的分区名批...
      99+
      2024-04-02
    • Hive中如何实现分区表
      这篇文章主要为大家展示了“Hive中如何实现分区表”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Hive中如何实现分区表”这篇文章吧。分区表对于一张比较大的表,将其设计成分区表可以提升查询的性能...
      99+
      2023-06-02
    • mysql中如何将一个表改为分区表
      这篇文章主要介绍mysql中如何将一个表改为分区表,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!mysql操作将一个表改为分区表:alter table 'table'...
      99+
      2024-04-02
    • MySQL中如何清空表数据
      目录MySQL清空表数据清空表数据一共有三种方式MySQL清空表数据命令:truncateMySQL删除表命令:dropMySQL清空数据表内容的语法:deleteMysq...
      99+
      2023-03-13
      MySQL清空表数据 MySQL清空数据 MySQL数据清空
    • MySQL中怎么实现分区表
      MySQL中怎么实现分区表,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。   MySQL分区的建立 MySQL可以建立四种分区...
      99+
      2024-04-02
    • 在Teradata中如何实现数据分区
      在Teradata中,数据分区可以通过以下几种方式来实现: 范围分区(Range Partitioning):根据某个列的范围值...
      99+
      2024-04-02
    • 怎么理解数据库移动分区表和分区索引的表空间
      这篇文章主要介绍“怎么理解数据库移动分区表和分区索引的表空间”,在日常操作中,相信很多人在怎么理解数据库移动分区表和分区索引的表空间问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解...
      99+
      2024-04-02
    • MySQL分区表如何实现按月份归类
      小编给大家分享一下MySQL分区表如何实现按月份归类,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!建表一般的表(innodb)创建后只有一个 idb 文件:cre...
      99+
      2023-06-25
    • mysql如何创建分区表
      MySQL可以通过以下步骤来创建分区表:1. 创建一个普通的表,定义它的列和其他属性。2. 使用`ALTER TABLE`语句来添加...
      99+
      2023-10-12
      mysql
    • 如何使用MySQL分区表
      这篇文章给大家介绍如何使用MySQL分区表,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。分区是一种表的设计模式,通俗地讲表分区是将一大表,根据条件分割成若干个小表。但是对于应用程序来讲...
      99+
      2024-04-02
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作