博客
关于我
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):生成下个月的日期
  • 如果对定时任务执行失败较为常见,可以采取以下优化措施:
    • 每半个月执行一次定时任务
    • 建立监控机制,及时发现和处理问题
  • 对于oraclesql server等其他数据库,也可以通过类似的方式管理数据库表结构
  • 请确保用户具备访问information_schema数据库的权限
  • 通过以上方法,可以有效管理数据库表结构,避免因配置遗漏而影响业务连续性。

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

    你可能感兴趣的文章
    POJ1182(带权并查集)
    查看>>
    Qt笔记——Qt初探、PyQt5和Qt5
    查看>>
    poj1190生日蛋糕
    查看>>
    POJ1218 HDU1337 ZOJ1350 UVALive2557 THE DRUNK JAILER
    查看>>
    poj1222 EXTENDED LIGHTS OUT(gauss)
    查看>>
    POJ1240 m叉树
    查看>>
    Poj1328--Radar Installation(区间选点)
    查看>>
    POJ1384Piggy-Bank(DP)
    查看>>
    POJ1417 True Liars —— 并查集 + DP
    查看>>
    Poj1459 Power Network 预流推进
    查看>>
    POJ1502(MPI Maelstrom)
    查看>>
    poj1568 Find the Winning Move[极大极小搜索+alpha-beta剪枝]
    查看>>
    poj1730 - Perfect Pth Powers(完全平方数)(水题)
    查看>>
    poj1753——Flip Game
    查看>>
    poj1936 假期计划第一水
    查看>>
    poj1958-汉诺四塔问题(三种方法)
    查看>>
    poj1988(并查集)
    查看>>
    POJ2007+几何+极角排序
    查看>>
    poj2039
    查看>>
    poj2135(简单的最小费用流问题)
    查看>>