博客
关于我
MySQL数据库干货分享!mysql每月自动创建表结构
阅读量:423 次
发布时间:2019-03-06

本文共 1903 字,大约阅读时间需要 6 分钟。

业务数据量较大时,为了避免因遗忘配置而影响业务,许多数据库管理员会采用按月创建临时表的方式。这种表结构的特点是字段和索引完全一致,只有表名会根据月份动态变化。

定期创建月度表的最佳实践

创建存储过程

  • 首先,需要创建一个存储过程来自动处理表结构的创建和迁移。
  • 存储过程需要遍历数据库中的所有表,识别与当前月份格式匹配的表名,并为下个月生成新的表名。
  • 定时任务配置

  • 在配置定时任务时,确保开启数据库的event_scheduler。
  • 定时任务需要调用上述存储过程,并按照预定频率执行(如每周一次)。
  • 存储过程代码示例

    DELIMITER $$DROP PROCEDURE IF EXISTS `pro_autocre_month_table`$$CREATE DEFINER=`root`@`%` PROCEDURE `pro_autocre_month_table`()BEGIN    DECLARE old_table_name VARCHAR(128);    DECLARE new_table_name VARCHAR(128);    DECLARE done INT DEFAULT 0;    DECLARE table_cursor CURSOR FOR SELECT TABLE_NAME FROM `information_schema`.`TABLES`         WHERE TABLE_SCHEMA = '目标数据库名称'        AND TABLE_NAME REGEXP DATE_FORMAT(CURDATE(), '%Y%m');        DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;        OPEN table_cursor;        REPEAT        FETCH table_cursor INTO old_table_name;        IF NOT done THEN            SET @sqlCmd = CONCAT('create table if not exists `',                 REPLACE(old_table_name,                     DATE_FORMAT(CURDATE(), '%Y%m'),                     DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL 1 MONTH), '%Y%m')),                 '` like ''', old_table_name, ''');                        PREPARE preStmt FROM @sqlCmd;            EXECUTE preStmt;        END IF;    UNTIL done END REPEAT;        CLOSE table_cursor;END$$DELIMITER ;

    定时任务配置示例

    DELIMITER $$SET GLOBAL event_scheduler = ON$$CREATE EVENT `数据库名称`.`auto_create_table`ON SCHEDULE    EVERY 1 WEEK STARTS '2014-01-01 00:00:00' ON COMPLETION NOT PRESERVE ENABLEDO BEGIN    CALL `pro_autocre_month_table`();END$$DELIMITER ;

    注意事项

  • 在TABLE_SCHEMA = '目标数据库名称'中,请将目标数据库名称替换为实际所在数据库的名称。
  • 该存储过程主要处理表名为201401、201402等格式的表结构,其他类型可参考以下说明:
    • %Y%m:四位年份加两个月数
    • DATE_ADD(CURDATE(), INTERVAL 1 MONTH):生成下个月的日期
  • 如果对定时任务执行失败较为常见,可以采取以下优化措施:
    • 每半个月执行一次定时任务
    • 建立监控机制,及时发现和处理问题
  • 对于oracle和sql server等其他数据库,也可以通过类似的方式管理数据库表结构
  • 请确保用户具备访问information_schema数据库的权限
  • 通过以上方法,可以有效管理数据库表结构,避免因配置遗漏而影响业务连续性。

    转载地址:http://ifakz.baihongyu.com/

    你可能感兴趣的文章
    Python中实现ASCII码与字符相互转换
    查看>>
    Python中实现获取所有微信好友的头像并拼接成一张图片
    查看>>
    Python中对象的布尔值
    查看>>
    python中对集合的操作
    查看>>
    python中将列表转换为元组的时间复杂度,反之亦然
    查看>>
    Python中布尔表达式的求值
    查看>>
    python中很常用的10个内置函数整理(初学必备)
    查看>>
    python中打印二维列表数据
    查看>>
    python中打散数组shuffle
    查看>>
    Python中执行外部命令
    查看>>
    Python中拼接numpy数组-ChatGPT4o作答
    查看>>
    Python中提示:no module named 'PIL'
    查看>>
    Python中提示:UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position
    查看>>
    python中数据类型存储_浅谈Python中的数据类型
    查看>>
    python中文件最重要的功能是什么-学 Python 都用来干嘛的?
    查看>>
    python中文版语言_高盛最新调查:Python超过汉语成为未来最重要技能,你准备学哪种编程语言?...
    查看>>
    Python中文问题SyntaxError
    查看>>
    Python中方括号和括号括起来的列表有什么区别?
    查看>>
    python中时间处理_Python中处理时间的几种方法小结
    查看>>
    Python中枚举串口(包括虚拟端口)的跨平台方法是什么?
    查看>>