博客
关于我
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/

    你可能感兴趣的文章
    Objective-C实现extended euclidean algorithm扩展欧几里得算法(附完整源码)
    查看>>
    Objective-C实现Factorial digit sum阶乘数字和算法(附完整源码)
    查看>>
    Objective-C实现factorial iterative阶乘迭代算法(附完整源码)
    查看>>
    Objective-C实现factorial recursive阶乘递归算法(附完整源码)
    查看>>
    Objective-C实现factorial阶乘算法(附完整源码)
    查看>>
    Objective-C实现Fast Powering算法(附完整源码)
    查看>>
    Objective-C实现fenwick tree芬威克树算法(附完整源码)
    查看>>
    Objective-C实现FenwickTree芬威克树算法(附完整源码)
    查看>>
    Objective-C实现fft2函数功能(附完整源码)
    查看>>
    Objective-C实现FFT算法(附完整源码)
    查看>>
    Objective-C实现fibonacci斐波那契算法(附完整源码)
    查看>>
    Objective-C实现FigurateNumber垛积数算法(附完整源码)
    查看>>
    Objective-C实现first come first served先到先得算法(附完整源码)
    查看>>
    Objective-C实现Gale-Shapley盖尔-沙普利算法(附完整源码)
    查看>>
    Objective-C实现hamiltonianCycle哈密尔顿图算法(附完整源码)
    查看>>
    Objective-C实现hamming numbers汉明数算法(附完整源码)
    查看>>
    Objective-C实现hanning 窗(附完整源码)
    查看>>
    Objective-C实现hanoiTower汉诺塔算法(附完整源码)
    查看>>
    Objective-C实现hardy ramanujana定理算法(附完整源码)
    查看>>
    Objective-C实现harmonic series调和级数算法(附完整源码)
    查看>>