タイミングテーブルを削除するには、MySQLのストアドプロシージャ

内部の産業監視では、毎日のデータ、記録の必要性は、長い時間の後、MySQLデータベースを簡単に爆発します。この時、ほんの数ヶ月以内に前のデータ、記録データのクリアランスを行うことを許可されている場合。

$ DELIMITER
IFはp_clearOldDataをEXISTSのDROP PROCEDURE;
/ *
g_date_limitの時間制限、など2019_08として、表が時間前に削除される
ように、伝送ここべき7時間サフィックス2019_08として、長さg_date_length時刻形式。 
* /
CREATE PROCEDURE p_clearOldData(g_date_limitでg_date_length int型でVARCHAR(30)、)
開始
    / *テーブル名のクエリ* /
    DECLARE g_table VARCHAR(100);

    / *テーブル名のクエリ時間* /接尾辞に対応する
    DECLAREのg_date VARCHAR(30)DEFAULT「」;

    / * * /ループのうち使用するため、行わ定義
    DECLAREはDEFAULT 0ビット」DONE。

    / *声明游标* /
    't_bk001_%'のようなTABLE_SCHEMAは= 'tt_abc'とTABLE_NAME INFORMATION_SCHEMA.TABLESから選択TABLE_NAMEのDeclare g_cursorのCURSOR;

    / *実行されますカーソルクエリ、見つからない場合は、次のいずれかが、アウトREPEATループ* / 1に設定されて
  DECLARE SET = 1を行って、NOT FOUNDのハンドラを続けます。

    / * *動的SQL /保留中
    のSET @v_full_sqlを:= '';

    / *カーソル* /開く
    オープンg_cursorを。

    繰り返す

        g_tableにg_cursor FETCH。

        g_date =右(g_table、g_date_length)を設定します。

        g_date <g_date_limitそして、もし

            セット@v_full_sql = CONCAT( '存在する場合、テーブルをドロップ' g_table)。

            / *このプリコンパイルされた動的SQL、および* / STMTに格納されている
            @v_full_sqlからSTMTを調製します。

            / * * /テーブルを削除し、この動的SQLの役割を、この動的SQLを実行する
            のstmtを実行します。   

            / *このリソース* /リリース
            DEALLOCATEがSTMTを準備します。

        場合は終了。

    リピートループの/ *終了* /
    END REPEATをDONE UNTIL。

    / *カーソル* / CLOSE
    クローズg_cursorを。

「OK」を選択します。

$終了
区切り文字を。

MySQLデータベースには、テスト:

CREATE TABLEの`t_bk001_2019_02`(
  ` id`はint(11)NOT NULL AUTO_INCREMENT、
  PRIMARY KEY( `id`)
)ENGINE =のInnoDB DEFAULT CHARSET = utf8を

スクリプトを実行します。

p_clearOldData( '2019_03'、7)を呼び出します。

あなたは、テーブルが実際に削除され、他のテーブルには影響されていないことがわかります。

パケットを送信することはできません背景、およびスケジュールされたタスクは、MySQLのストアドプロシージャをすることができます場合は、タイミングテーブルの削除操作を実現しています。

このように、また、我々は、このストレージ・プロセスを変更する必要がある、またはストアドプロシージャを再作成する場合は、この手順は、パラメータなしでパッケージとして保存されます。

*注:

上記の動作は推奨されないバックグラウンドタスク実行テーブルの削除操作のタイミングによって推奨MySQLでタイミングとストアドプロシージャによって、このタスクを達成します。

おすすめ

転載: www.linuxidc.com/Linux/2019-09/160476.htm