最近遇到老板一个任务,要求我删除我们生产数据库产生的流水表的历史的数据,总共大约有2千万条数据。由于流水表正在使用,如果直接删除2千万条这么多的数据会造成卡死,甚至锁表,影响业务。我也考虑过新建一个表,把要保留的数据导入新表,然后再删除旧表,但是由于这个表正在使用,所以这个方案不太合适。后来就查找资料,想到用存储过程的方式,创建一个存储过程,每次删除1万条数据,每次删除都sleep 5秒的时间,这样数据库不会有太大的压力,不会造成锁表。

我决定采用存储过程的方式去删除,在mysql命令行执行,过程如下:

delimiter $$
DROP PROCEDURE IF EXISTS proc_batch_delete;
CREATE PROCEDURE proc_batch_delete()
BEGINDECLARE tcount BIGINT;#这步骤是将要删除的历史数据行数保存在变量tcount中SELECT COUNT(0) INTO tcount FROM t_test WHERE 'Date' <= '20211231';SELECT tcountWHILE tcount>0 DO#每次删1万条DELETE FROM t_test WHERE 'Date' <= '20211231' LIMIT 10000;#每次删完tcount减去10000SET tcount=tcount-10000commit;#为防止锁表,睡眠5秒SELECT sleep(5);SELECT tcount;END WHILE;
END $$
delimiter ;
#调用存储过程
CALL proc_batch_delete;

这样写,每次删完都会输出还剩多少行,比较直观清楚

mysql利用存储过程删除数据库历史的过期数据相关推荐

  1. mysql利用触发器删除数据库_[数据库]mysql 触发器的创建 修改 删除

    [数据库]mysql 触发器的创建 修改 删除 0 2015-12-16 23:00:04 //做一个简单的练习,创建一个简单的触发器 完成添加文章的时候,自动加上时间,默认作者 为 '日记本的回忆' ...

  2. mysql利用binlog删除数据库_MySQL数据库之mysql手动删除BINLOG的方法

    本文主要向大家介绍了MySQL数据库之mysql手动删除BINLOG的方法 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. 在MySQL中执行以下命令: 复制代码 代码如下: P ...

  3. MySQL利用存储过程清除所有表中的所有记录

    MySQL利用存储过程清除所有表中的所有记录 在使用MySQL过程中,难免会出现一些测试数据,然而这些测试数据在真正部署运行的时候,通常要被清楚掉,并且自增长的字段要回复初始值.如何高效快速的实现以上 ...

  4. MySQL利用存储过程自动生成千万条数据

    文章目录 ​前言 ​一.实现思路 ​二.实现步骤 ​1.创建数据库 ​2.创建存储表和内存表 ​3.创建所需函数 ​4.创建存储过程 ​5.调用存储过程插入数据 ​6.统计数据库 ​ 拓展 ​总结 前 ...

  5. mysql 5.7 删除数据库_MySQL5.7(二)数据库的基本操作

    登录MySQL数据库 格式:mysql -u 用户名 -h 主机名或IP地址  -P 端口号 -p 密码 1.显示数据库 SHOW DATABASES; MySQL5.7.20默认数据库 inform ...

  6. mysql 按日期删除数据库_DAY11 - MySQL入门(数据库的增、删、改、查 基本操作)...

    一. 数据库的介绍 二. MySQL的基本语法 l 注释: 单行注释: #注释内容 单行注释: -- 注释内容(注意,两个"--"之后有一个空格) 多行注释: /*注释内容*/ l ...

  7. mysql 1010 rmdir_mysql删除数据库1010

    mysql无法删除数据库:ERROR 1010 (HY000): Error dropping database(can't rmdir './hive/') 应用场景 搭建hadoop环境的时候,安 ...

  8. mysql使用游标删除数据库_mysql 使用游标进行删除操作的存储过程

    BEGIN DECLARE  hprocessInstanceId bigint DEFAULT 0; -- 历史流程实例id DECLARE  hprocessInstanceIdStarttime ...

  9. mysql根据id删除数据库,MYSQL删除表中的指定ID数据

    MYSQL删除表中的指定ID数据 删除A表中的ID 中的开头以B* 的数据库. 复制代码 代码如下: delete FROM A WHERE id like 'B%' 单独删除 A 表中的ID B 复 ...

最新文章

  1. 使用Nagios监控网页
  2. UpdatePanel控件的简单属性学习
  3. php预处理查询数据库,php+mysqli使用预处理技术进行数据库查询的方法
  4. 怎么让程序后台运行_CPU中的程序是怎么运行起来的?
  5. FTP服务器的搭建与安全配置
  6. NLP应该如何学、如何教?斯坦福大学大牛Dan Jurafsky教授专访
  7. mysql 传送时间_vue处理mysql数据库中的时间数据(datetime)
  8. 计算机专业中最受热议的4个专业,2018考研后身价倍增的4个专业盘点
  9. otsu算法_【车牌识别算法】
  10. NetWare 5.1 Does Not Recognize CD-ROM Drive
  11. 将截断字符串或二进制数据 语句已终止
  12. DL加速器与GPU的不同,一个用于推理,一个用于训练。
  13. java inner class_Java Inner Class 内部类
  14. 前端越早入行越吃香!【全新web前端开发视频教程】
  15. redis/memcached可视化客户端工具TreeNMS
  16. linux安全加固项目
  17. 测试自行车速度的软件,自行车速度测试
  18. 微信支付之微信公众号网页支付(各种总结)
  19. Java版数据结构之数组模拟环形队列demo
  20. 2021年5月信息系统项目管理师真题基础知识1~32题

热门文章

  1. [CF467D]Fedor and Essay
  2. IT销售之道和做生意十忌
  3. 1-02 C++起步: 用结构组织数据 —— 数据封装初步
  4. SAP 采购订单入库——最近收货日期
  5. 实战PyQt5: 062-向导对话框QWizard
  6. 不以物喜不以己悲:很难修炼得道
  7. 微信公众平台java开发之接口url与token填写
  8. 雷军输给了董明珠,但是却赢了事业
  9. PostgreSQL系统表 pg_stats
  10. 05|面试即正义第一期:什么样的问题应该使用动态规划?