MySQL ストアド プロシージャで月ごとにテーブルを作成する方法

MySQL ストアド プロシージャで月ごとにテーブルを作成する方法

詳細には立ち入らずに、コードに直接進みましょう。一緒にコミュニケーションを取り、学びましょう。

月ごとにテーブルを作成するストアド プロシージャを作成します。SQL ステートメントは次のとおりです。

区切り文字 // 
存在する場合はプロシージャを削除してください create_table_by_month //
プロシージャ `create_table_by_month`() を作成します。
始める

  #-- 後で使用する変数を事前に宣言します。DECLARE nextMonth varchar(20);
    nextTABLE varchar(20) を宣言します。
    csql varchar(5210) を宣言します。
    outputParam int を宣言します。
    tableName_1 varchar(20) を宣言します。
    tableName_2 varchar(20) を宣言します。
    table_prefix varchar(20) を宣言します。

  #--次の月を取得します SELECT SUBSTR(replace(DATE_ADD(CURDATE(), INTERVAL 1 MONTH), '-', ''), 1, 6) INTO @nextMonth;
  #--上記の SQL ステートメントを分割して分析します。
  #MySQL 時間関数 date_add() は、日付に時間間隔を追加します。この SQL は、現在の日付から 1 か月後の日付を意味します #select DATE_ADD(CURDATE(), INTERVAL 1 MONTH); 
  ##戻る 20201006
  #select replace('2020-10-06', '-', '');
  ##戻る 20201006
  #select replace(DATE_ADD(CURDATE(), INTERVAL 1 MONTH), '-', '');
  ## 202010に戻る
  #SUBSTR(20201006,1,6)を選択します。
  ## 変数 @nextMonth に値を割り当てます #SELECT SUBSTR(20201006,1,6) INTO @nextMonth;

# 表1
    #テーブルプレフィックス変数値をtd_user_banks_log_に設定します
    @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) 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 'Remarks',
        `create_at` タイムスタンプ NOT NULL DEFAULT CURRENT_TIMESTAMP、
        主キー (`id`)、
        キー `app_id` (`app_id`),
        キー `user_id` (`user_id`),
        キー `type` (`type`),
        キー `create_at` (`create_at`)
      )ENGINE=InnoDB デフォルト文字セット=utf8mb4;");
  #PREPARE はじめに:
  ## このステートメントは、ステートメントを準備し、後で参照できるように statement_name という名前を指定するために使用されます。ステートメント名では大文字と小文字は区別されません。
  ##preparable_stmt は、リテラル文字列またはステートメント テキストを含むユーザー変数にすることができます。テキストは複数の SQL ステートメントではなく、単一の SQL ステートメントを表す必要があります。
  @csql から create_stmt を準備します。 
    create_stmt を実行します。
  割り当てを解除して、create_stmt を準備します。

# 表 2 と表 1 は同じ SQL なので、ここでは紹介しません。
    @table_prefix を 'td_sign_log_' に設定します。

    @tableName_2 を CONCAT(@table_prefix, @nextMonth); に設定します。

    @csql=concat("テーブルが存在しない場合は作成する ",@tableName_2,"(
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `app_id` varchar(100) NULLではない、
      `user_id` int(11) NULLではない、
      `day` int(11) NOT NULL デフォルト '0' コメント 'day',
      `sign_type` tinyint(2) NOT NULL DEFAULT '1' COMMENT '1 サインイン 2 メイクアップサインイン 3 累積報酬',
      `type` tinyint(2) NOT NULL DEFAULT '1' COMMENT '1 gold coin',
      `num` int(11) NOT NULL デフォルト '0',
      `data_id` int(11) NOT NULL デフォルト '0',
      `create_at` タイムスタンプ NOT NULL DEFAULT CURRENT_TIMESTAMP、
      主キー (`id`)、
      キー `app_id` (`app_id`),
      キー `user_id` (`user_id`),
      キー `type` (`type`),
      キー `data_id` (`data_id`),
      キー `create_at` (`create_at`)、
      キー `sign_type` (`sign_type`),
      キー `day` (`day`)
    )ENGINE=InnoDB デフォルト文字セット=utf8mb4;");

    @csql から create_stmt を準備します。 
    create_stmt を実行します。
    割り当てを解除して、create_stmt を準備します。

    SELECT COUNT(1) INTO @outputParam FROM information_schema.`TABLES` WHERE TABLE_NAME in (@tableName_1, @tableName_2);
    @出力パラメータを選択します。

終わり //
区切り文字 ;
#-- 毎月、現在の月のテーブルに対してスケジュールされたタスクを作成します。

イベント `create_table_by_month` を作成します。スケジュールは 1 か月ごとに '2020-09-06 12:40:00' で開始します。完了時に保持しないで有効にします。create_table_by_month() を呼び出します。

常識的なヒント: スケジュールされたタスクで、特定の時間に実行するストアド プロシージャ SQL1 ステートメントを呼び出します。指定する時間は将来の時間である必要があります。

#ストアド プロシージャを作成するための SQL ステートメントを表示します。

作成手順を表示 create_table_by_month_G
#ストアドプロシージャを削除します:

create_table_by_month が存在する場合はプロシージャを削除します。
#スケジュールされたタスクドロップイベントを削除します。create_table_by_month1;

上記のストアドプロシージャSQL文とタイマーSQL文は、本番環境で使用されます。

#エラーのトラブルシューティング:

MySQL ログにエラーが報告されているのがわかりました。元のストアド プロシージャの SQL 文で追加されたインデックス キー フィールドが、たまたまテーブルに存在しないフィールドだったため、次のエラーが報告されました。したがって、ストアド プロシージャのインデックス キー フィールドを削除すると、SQL は正常になります。

2020-09-06T12:40:00.244879+08:00 604392 [エラー] イベント スケジューラ: [root@localhost][test0001.create_table_by_month1] キー列 'sign_date' がテーブルに存在しません
2020-09-06T12:40:00.244926+08:00 604392 [注記] イベント スケジューラ: [root@localhost].[test0001.create_table_by_month1] イベントの実行に失敗しました。

上記のストアド プロシージャは、このブロガーのオンライン ビジネス環境の SQL のみです。直接適用しないでください。発生した損失は、このブログ投稿とは何の関係もありません。この記事は学習とコミュニケーションを本来の目的としてここに公開されており、皆様の学習とコミュニケーションの参考としてのみご利用ください。

これで、MySQL のストアド プロシージャを使用して月別のテーブルを作成する手順に関するこの記事は終了です。MySQL で月別のテーブルを作成する方法の詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySQL ストアド プロシージャの作成、呼び出し、管理の詳細な説明
  • MySQL ストアド プロシージャのクエリ コマンドの概要
  • MySQL ストアド プロシージャの in、out、inout パラメータの例と概要
  • MySQLストアドプロシージャを変更する詳細な手順
  • カーソル ループを使用して、MySQL ストアド プロシージャで一時テーブルを読み取る
  • MySQL ストアド プロシージャ関連の権限変更の問題
  • MySQL ストアド プロシージャ (in、out、inout) の詳細な説明
  • MySql ビュー、トリガー、ストアド プロシージャに関する簡単な説明
  • MySQL ストアド プロシージャで if ステートメントを使用する詳細な例
  • MySQL ストアドプロシージャの長所と短所の分析

<<:  Linux statコマンドの使用

>>:  Electronで不規則な形状の透明部分をクリックする実装

推薦する

MySQL インデックスの原理と使用例の分析

この記事では、例を使用して MySQL インデックスの原理と使用方法を説明します。ご参考までに、詳細...

iframe の多層ネスト、無制限のネスト、高度に適応したソリューション

ページ A、B、C の 3 つがあります。ページ A にはページ B が含まれ、ページ B にはペー...

MySQL レプリケーション メカニズムの原理の説明

背景レプリケーションはデータの完全なコピーです。レプリケーションが必要な理由として、まず思い浮かぶの...

CSS3 シンプルカットカルーセル画像実装コード

実装のアイデアまず、親コンテナーを作成し、2 つの順序なしリストを使用して、柔軟なレイアウトで親コン...

Ubuntu 16.04 で Python 3 を使用して Django プロジェクトを作成し、実行する方法

ステップ1: Djangoプロジェクトを作成するターミナルを開き、書き込みたいプロジェクトのアドレス...

Linuxのwhichコマンドの具体的な使い方

Linux でファイルを見つけたいのに、その場所がわからないことがよくあります。次のコマンドを使用し...

MySQLの結合クエリ、ユニオンクエリ、サブクエリの原理と使用例の詳細な説明

この記事では、例を使用して、MySQL の結合クエリ、結合クエリ、サブクエリの原理と使用方法を説明し...

CSS3 はドラッグ可能なルービックキューブの 3D 効果を実現します

主に使用される知識ポイント: •css3 3D変換 •ネイティブjsマウスドラッグイベント•表示:グ...

NginxにおけるRewriteのリダイレクト設定と実践の詳しい解説

1: アドレス書き換えとア​​ドレス転送の意味を理解する。アドレス書き換えとア​​ドレス転送は異なる...

ubuntu16.04でNFSサービスを構築する方法

NFS の紹介NFS (ネットワーク ファイル システム) は、FreeBSD でサポートされている...

CSS3はリストの無限スクロール/カルーセル効果を実現します

効果プレビューアイデア現在のリストを最後の項目までスクロールし、すぐに最初の項目に戻ります。問題1....

Vue3 プロジェクトで WeChat 認証ログインをエレガントに実装する方法

目次序文準備する実装のアイデアコードについて要約する序文WeChat 認証ログインは、WeChat ...

VueとFlask間の通信の実装

axiosをインストールして通信を実装するここでは、axios を使用して Vue フロントエンドと...

音楽プレーヤーアプリ(アプリケーションソフトウェア)の分析と再設計 美しい音楽プレーヤーインターフェースの設計方法

無線インタラクションにずっと興味があったので、今回は実践してみようと思います〜この分析と評価は iO...

Linuxでmore、less、catコマンドを使用してファイルの内容を表示します

Linux では、cat、more、less の各コマンドを使用してファイルの内容を表示できます。c...