この記事では、例を使用して、MySQL の計画されたタスクとイベントのスケジュールについて説明します。ご参考までに、詳細は以下の通りです。 MySQL イベントは、事前定義されたスケジュールに基づいて実行されるタスクであるため、スケジュールされたイベントと呼ばれることもあります。 MySQL イベントは、トリガーのようにテーブルを更新するのではなく、時間によってトリガーされるため、「時間トリガー」とも呼ばれます。 MySQL イベントは、UNIX の cron ジョブや Windows のタスク スケジューラに似ています。 MySQL イベントは、データベース テーブルの最適化、ログのクリーンアップ、データのアーカイブ、またはオフピーク時の複雑なレポートの生成に使用できます。 MySQL は、イベントディスパッチスレッドと呼ばれる特別なスレッドを使用して、スケジュールされたすべてのイベントを実行します。次のコマンドを実行すると、イベント スケジューラ スレッドのステータスを表示できます。 プロセスリストを表示します。 上記のクエリステートメントを実行すると、次の結果が得られます。 mysql> プロセスリストを表示します。 +----+------+-----------------+----------+--------+---------+----------+------------------+ | ID | ユーザー | ホスト | db | コマンド | 時間 | 状態 | 情報 | +----+------+-----------------+----------+--------+---------+----------+------------------+ | 2 | ルート | localhost:50405 | NULL | スリープ | 1966 | | NULL | | 3 | ルート | localhost:50406 | yiibaidb | スリープ | 1964 | | NULL | | 4 | root | localhost:50407 | yiibaidb | クエリ | 0 | 開始 | SHOW PROCESSLIST | +----+------+-----------------+----------+--------+---------+----------+------------------+ 3行セット デフォルトでは、イベント ディスパッチャ スレッドは有効になっていません。 イベント ディスパッチャ スレッドを有効にして開始するには、次のコマンドを実行する必要があります。 グローバルイベントスケジューラを ON に設定します。 ここで、イベント スケジューラ スレッドのステータスを確認するには、SHOW PROCESSLIST コマンドを再度実行します。結果は次のようになります。 mysql> プロセスリストを表示します。 +----+-----------------+-----------------+----------+--------+------------------------+------------------+ | ID | ユーザー | ホスト | db | コマンド | 時間 | 状態 | 情報 | +----+-----------------+-----------------+----------+--------+------------------------+------------------+ | 2 | ルート | localhost:50405 | NULL | スリープ | 1986 | | NULL | | 3 | ルート | localhost:50406 | luyaran | スリープ | 1984 | | NULL | | 4 | root | localhost:50407 | luyaran | クエリ | 0 | 開始 | SHOW PROCESSLIST | | 5 | event_scheduler | localhost | NULL | デーモン | 6 | 空のキューを待機中 | NULL | +----+-----------------+-----------------+----------+--------+------------------------+------------------+ 4行セット イベント スケジューラ スレッドを無効にして停止するには、SET GLOBAL コマンドを実行して event_scheduler の値を OFF に設定します。 グローバルイベントスケジューラを OFF に設定します。 ご存知のとおり、イベントは SQL ステートメントを含む名前付きオブジェクトです。イベントの作成は、他のデータベース オブジェクト (ストアド プロシージャやトリガーなど) の作成と似ています。ただし、ストアド プロシージャは直接呼び出された場合にのみ実行されます。トリガーは、テーブル上のイベント (挿入、更新、削除など) に関連付けられています。イベントが発生すると、イベントは 1 回以上の定期的な間隔で実行できます。それで、イベントはどうですか?次に、CREATE EVENT ステートメントを使用してイベントを作成します。構文構造を見てみましょう。 イベントを作成 [存在しない場合] イベント名 スケジュール通りのスケジュール する イベント本体 上記の SQL のパラメータの意味を詳しく見てみましょう。 まず、CREATE EVENT 句の後にイベント名を指定します。イベント名はデータベース スキーマ内で一意である必要があります。 次に、ON SCHEDULE 句の後にテーブルを追加します。イベントが 1 回限りのイベントの場合は、構文 AT timestamp [+ INTERVAL] を使用します。イベントが定期的なイベントの場合は、EVERY 句を使用します。EVERY interval STARTS timestamp [+INTERVAL] ENDS timestamp [+INTERVAL] 3 番目に、DO キーワードの後に DO ステートメントを配置します。ストアド プロシージャはイベント本体内で呼び出すことができることに注意してください。 複合 SQL ステートメントがある場合は、それを BEGIN END ブロック内に配置できます。 デモ用にメッセージ テーブルを作成しましょう。 CREATE TABLE IF NOT EXISTS メッセージ ( id INT 主キー AUTO_INCREMENT、 メッセージ VARCHAR(255) NOT NULL、 created_at 日時 NOT NULL ); 次に、CREATE EVENT ステートメントを使用してイベントを作成しましょう。 存在しない場合はイベントを作成する test_event_01 CURRENT_TIMESTAMP のスケジュールどおり する メッセージに INSERT INTO (メッセージ、created_at) VALUES('テストMySQLイベント1',NOW()); メッセージ テーブルを確認すると、レコードが 1 つあることがわかります。これは、イベントが作成時に実行されたことを意味します。 mysql> SELECT * FROM メッセージ; +----+--------------------+---------------------+ | ID | メッセージ | 作成日時 | +----+--------------------+---------------------+ | 1 | テスト MySQL イベント 1 | 2017-08-03 04:23:11 | +----+--------------------+---------------------+ セット内の1行 データベース (testdb) のすべてのイベントを表示するには、次のステートメントを使用します。 testdb からのイベントを表示します。 上記のクエリを実行しても、イベントは期限が切れると自動的に削除されるため、返される行は表示されません。 この場合、これは実行が完了すると期限が切れる 1 回限りのイベントです。この動作を変更するには、ON COMPLETION PRESERVE 句を使用できます。次のステートメントは、作成時刻の 1 分後に実行され、実行後に削除されない別の 1 回限りのイベントを作成します。 イベントの作成 test_event_02 スケジュールどおり、CURRENT_TIMESTAMP + 1分間隔 完了時に保存 する メッセージに INSERT INTO (メッセージ、created_at) VALUES('テストMySQLイベント2',NOW()); 1 分待ってからメッセージ テーブルを確認すると、別のレコードが追加されていることがわかります。 mysql> SELECT * FROM メッセージ; +----+--------------------+---------------------+ | ID | メッセージ | 作成日時 | +----+--------------------+---------------------+ | 1 | テスト MySQL イベント 1 | 2017-08-03 04:23:11 | | 2 | テスト MySQL イベント 2 | 2017-08-03 04:24:48 | +----+--------------------+---------------------+ 2行セット SHOW EVENTS ステートメントを再度実行すると、イベントが ON COMPLETION PRESERVE 句によるものであることがわかります。 mysql> testdb からのイベントを表示します。 +--------+---------------+----------------+------------+----------+----------+----------------------+----------------+--------+----------+----------------------+----------------------+----------------------+ | Db | 名前 | 定義者 | タイム ゾーン | タイプ | 実行時刻 | 間隔値 | 間隔フィールド | 開始 | 終了 | ステータス | 発信元 | character_set_client | collation_connection | データベース照合 | +--------+---------------+----------------+------------+----------+----------+----------------------+----------------+--------+----------+----------------------+----------------------+----------------------+ | testdb | test_event_02 | root@localhost | SYSTEM | ONE TIME | 2017-08-03 04:24:48 | NULL | NULL | NULL | NULL | 無効 | 0 | utf8 | utf8_general_ci | utf8_general_ci | +--------+---------------+----------------+------------+----------+----------+----------------------+----------------+--------+----------+----------------------+----------------------+----------------------+ セット内の1行 毎分実行され、作成時刻から 1 時間以内に期限が切れる定期的なイベントを作成しましょう。 イベントの作成 test_event_03 スケジュールどおり1分ごとに 開始時刻: CURRENT_TIMESTAMP 終了 CURRENT_TIMESTAMP + 間隔 1 時間 する メッセージに INSERT INTO (メッセージ、created_at) VALUES('MySQL の定期イベントをテスト',NOW()); イベントの有効期間を定義するには、STARTS 句と ENDS 句を使用することに注意してください。 3 ~ 5 分待ってから、メッセージ テーブル データをチェックして、このループ イベントの実行をテストおよび検証します。 mysql> SELECT * FROM メッセージ; +----+----------------------------+---------------------+ | ID | メッセージ | 作成日時 | +----+----------------------------+---------------------+ | 1 | テスト MySQL イベント 1 | 2017-08-03 04:23:11 | | 2 | テスト MySQL イベント 2 | 2017-08-03 04:24:48 | | 3 | MySQL 定期イベントのテスト | 2017-08-03 04:25:20 | | 4 | MySQL 定期イベントのテスト | 2017-08-03 04:26:20 | | 5 | MySQL 定期イベントのテスト | 2017-08-03 04:27:20 | +----+----------------------------+---------------------+ 5行セット その後、DROP EVENT ステートメントを使用してイベントを削除できます。構文構造を見てみましょう。 DROP EVENT [存在する場合] event_name; test_event_03 のイベントを削除するには、次の SQL を使用できます。 存在する場合はイベントを削除します test_event_03; さて、この記録についてはこれですべてです。 MySQL 関連のコンテンツに興味のある読者は、このサイトの次のトピックをチェックしてください: 「MySQL インデックス操作スキルの概要」、「MySQL 共通関数の概要」、「MySQL ログ操作スキルの概要」、「MySQL トランザクション操作スキルの概要」、「MySQL ストアド プロシージャ スキルの概要」、および「MySQL データベース ロック関連スキルの概要」。 この記事が皆様のMySQLデータベース設計に役立つことを願っています。 以下もご興味があるかもしれません:
|
CentOS7 64でのMySQL5.6.40のインストール手順1) 以前にインストールしたMySQ...
4 つのネットワーク タイプ:なし: コンテナのネットワーク機能を一切設定しません。--net=no...
目次開発の際には、機能を段階的に分析して実装することで、明確な考え方を保つことができます。 1. フ...
1. 背景Sysbench は、システムのハードウェア パフォーマンスをテストできるストレス テスト...
1. 属性付きHTMLタグXML/HTML コードコンテンツをクリップボードにコピー< htm...
vue+el-upload 複数ファイルの動的アップロード、参考までに具体的な内容は以下のとおりです...
目次1. 生放送効果2. ライブストリーミングを開始する手順2.1 Tencent Web(高速ライ...
JavaScript - 原則シリーズ日常の開発では、既存のプロジェクトを引き継ぐときは常に、まず他...
プロジェクトシナリオ: 1. アップロードファイルの制限関数: 1. フロントエンド操作による異常な...
HTML の一般的なコメント: <!--XXXXXXXX--> (XXXXXXXX はコ...
コードは次のようになります。 SELECT @i:=@i+1 行番号、 if(@total=t.s_...
ユニアプリアプレットはWeChatでも同様のドロップダウン問題を抱えることになる解決策は、app.v...
この記事の例では、テーブルを動的に生成したり行を削除したりするためのJavaScriptの具体的なコ...
目次序文プロトタイプチェーン継承コンストラクタの継承組み合わせ継承(プロトタイプチェーン継承とコンス...
目次1. LVS 負荷分散2. 負荷分散LVSの基本紹介3. LVSアーキテクチャ3.1 ロードバラ...