MySQLの記憶プロセスは月ごとに表を作成する方法ステップである。


具体的に多く言わないで、直接コードをつけます。一緒に交流して勉強することを歓迎します。
月ごとにテーブルを作成するための格納プロセスを作成します。SQL文は以下の通りです。

DELIMITER // 
DROP PROCEDURE IF EXISTS create_table_by_month //
CREATE PROCEDURE `create_table_by_month`()
BEGIN

  #--      ,     
    DECLARE nextMonth varchar(20);
    DECLARE nextTABLE varchar(20);
    DECLARE csql varchar(5210);
    DECLARE outputParam int;
    DECLARE tableName_1 varchar(20);
    DECLARE tableName_2 varchar(20);
    DECLARE table_prefix varchar(20);

  #--     
  SELECT SUBSTR(replace(DATE_ADD(CURDATE(), INTERVAL 1 MONTH), '-', ''), 1, 6) INTO @nextMonth;
  #--    SQL      :
  #MySQL    date_add()           , sql                  
  #select DATE_ADD(CURDATE(), INTERVAL 1 MONTH); 
  ##  20201006
  #select replace('2020-10-06', '-', '');
  ##  20201006
  #select replace(DATE_ADD(CURDATE(), INTERVAL 1 MONTH), '-', '');
  ##  202010
  #SELECT SUBSTR(20201006,1,6);
  ##     @nextMonth  
  #SELECT SUBSTR(20201006,1,6) INTO @nextMonth;

#  1
    #         td_user_banks_log_
    set @table_prefix = 'td_user_banks_log_';

    #   1   
    SET @tableName_1 = CONCAT(@table_prefix, @nextMonth);
    ##      SQL  
    set @csql=concat("create table if not exists ",@tableName_1,"(
        `id` int(11) NOT NULL AUTO_INCREMENT,
        `app_id` varchar(100) NOT NULL,
        `user_id` int(11) NOT NULL DEFAULT '0' COMMENT '  ID',
        `type` tinyint(2) NOT NULL DEFAULT '1' COMMENT '1      2      3   ',
        `gold_coin` int(11) NOT NULL,
        `remarks` varchar(200) NOT NULL DEFAULT '' COMMENT '  ',
        `create_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
        PRIMARY KEY (`id`),
        KEY `app_id` (`app_id`),
        KEY `user_id` (`user_id`),
        KEY `type` (`type`),
        KEY `create_at` (`create_at`)
      ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;");
  #PREPARE  :
  ##          ,     statement_name,       。           。
  ##preparable_stmt          ,                  。             SQL  ,       。
  PREPARE create_stmt from @csql; 
    EXECUTE create_stmt;
  DEALLOCATE PREPARE create_stmt;

#  2   1    SQL,      :
    set @table_prefix = 'td_sign_log_';

    SET @tableName_2 = CONCAT(@table_prefix, @nextMonth);

    set @csql=concat("create table if not exists ",@tableName_2,"(
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `app_id` varchar(100) NOT NULL,
      `user_id` int(11) NOT NULL,
      `day` int(11) NOT NULL DEFAULT '0' COMMENT ' ',
      `sign_type` tinyint(2) NOT NULL DEFAULT '1' COMMENT '1    2    3     ',
      `type` tinyint(2) NOT NULL DEFAULT '1' COMMENT '1   ',
      `num` int(11) NOT NULL DEFAULT '0',
      `data_id` int(11) NOT NULL DEFAULT '0',
      `create_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
      PRIMARY KEY (`id`),
      KEY `app_id` (`app_id`),
      KEY `user_id` (`user_id`),
      KEY `type` (`type`),
      KEY `data_id` (`data_id`),
      KEY `create_at` (`create_at`),
      KEY `sign_type` (`sign_type`),
      KEY `day` (`day`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;");

    PREPARE create_stmt from @csql; 
    EXECUTE create_stmt;
    DEALLOCATE PREPARE create_stmt;

    SELECT COUNT(1) INTO @outputParam FROM information_schema.`TABLES` WHERE TABLE_NAME in (@tableName_1, @tableName_2);
    SELECT @outputParam;

END //
delimiter ;

#--              :

create EVENT `create_table_by_month` ON SCHEDULE EVERY 1 MONTH STARTS '2020-09-06 12:40:00' ON COMPLETION NOT PRESERVE ENABLE DO call create_table_by_month();
常識提示:計画タスクにおいて、ある具体的な時間が格納プロセスSQL 1文を呼び出して実行する。この指定の具体的な時間は将来の時間でなければなりません。

#         SQL  :

show create PROCEDURE create_table_by_month\G

#      :

DROP PROCEDURE IF EXISTS create_table_by_month;

#      

drop event create_table_by_month1;
以上の格納過程のSQL文とタイマーのSQL文は生産環境で使用されたものです。
湖南省の検査報告は間違っています
mysqlのログエラーが発見されました。元の格納過程のSQL文に追加されたインデックスキーフィールドはテーブルに存在しないフィールドなので、下のエラーが発生しました。保存中の索引キーフィールドSQLを削除すればOKです。
2020-09-06 T 12:40:00.244879+08:00 604392[ERROR]Event Scheduler:[root@localhost」[test 0001.reate_]テーブルby_month 1]Key column'sign_date'doesn't exist in table
2020-09-06 T 12:40:00.244926+08:00 604392[Note]Event Scheduler:[root@localhost」.[test 0001.reate_]テーブルby_month 1]イベントexecution failed.
上記の記憶過程は本博のメインライン上の業務環境のSQLだけであり、直接にカバーしないでください。学習交流のためにここを発表します。皆さんの学習交流の参考にしてください。
ここで、MySQLの記憶プロセスについて月ごとに表を作成する方法の手順についての記事を紹介します。MySQLは月ごとに作成した表の内容について、以前の文章を検索したり、次の関連記事を見たりしてください。これからもよろしくお願いします。