博客
关于我
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:datetime tzinfo 时区名称文档
    查看>>
    Python:deepcopy(list) vs new_list = old_list[:]
    查看>>
    Python:Google API - 从消息中获取 mimeTypes
    查看>>
    Python:Google API - 从消息中获取 mimeTypes
    查看>>
    Python:subprocess.call,stdout to file,stderr to file,在屏幕上实时显示stderr
    查看>>
    Python:TypeError:无法连接“str“和“int“对象
    查看>>
    Python:XPath 在 ElementTree 中不可用
    查看>>
    Python:从 FTP 服务器下载文件
    查看>>
    python:从列表中创建元组列表
    查看>>
    Python:从嵌套列表中删除重复项
    查看>>
    Python:从间隔映射到值
    查看>>
    Python:使用 shell=False 的子进程调用不起作用
    查看>>
    Python:修改 PATH 环境变量的平台无关方式
    查看>>
    Python:假与 0
    查看>>
    Python:函数使用
    查看>>
    Python:函数进阶
    查看>>
    Python:在整数的二进制表示中查找最长的二进制间隙
    查看>>
    Python:如何从二进制转换为 base 64 并返回?
    查看>>
    Python:如何以非阻塞方式读取子进程的标准输出
    查看>>
    Python:如何使用 plotly 制作阴影区域或交替背景颜色?
    查看>>