内部の産業監視では、毎日のデータ、記録の必要性は、長い時間の後、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でタイミングとストアドプロシージャによって、このタスクを達成します。