mysql スケジュールタスク (イベント イベント) の詳細な説明

mysql スケジュールタスク (イベント イベント) の詳細な説明

1. イベントの簡単な紹介

イベントは、MySQL が特定の時間に呼び出す手続き型データベース オブジェクトです。イベントは一度だけ呼び出すことも、定期的に開始することもできます。これは、いわゆる「イベント スケジューラ」と呼ばれる特定のスレッドによって管理されます。

イベントは、何かが発生したときにトリガーされるという点でトリガーに似ています。トリガーはデータベース上でステートメントが開始されたときに起動されますが、イベントはスケジュールされたイベントに基づいて起動されます。互いに類似しているため、イベントは一時トリガーとも呼ばれます。

イベントは、以前はオペレーティング システムのスケジュールされたタスクによってのみ実行可能であった作業を置き換えます。MySQL のイベント スケジューラは 1 秒あたり 1 つのタスクを正確に実行できますが、オペレーティング システムのスケジュールされたタスク (Linux の CRON や Windows のタスク スケジューリングなど) は 1 分あたり 1 回しか実行できません。

2 イベントのメリットとデメリット

2.1 利点

データに対する一部のスケジュールされた操作は、外部プログラムに依存せず、データベース自体が提供する関数を直接使用します。
タスクを毎秒実行することが可能であり、これはリアルタイム要件が高い一部の環境では非常に実用的です。

2.2 デメリット

時間指定トリガー。呼び出すことができません。

3 イベントを作成する

作成イベント ステートメントはイベントを作成します。各イベントは 2 つの主要な部分で構成されます。最初の部分はイベント スケジュールで、イベントがいつ開始され、どのくらいの頻度で開催されるかを示します。

2番目の部分はイベントアクションで、イベントがトリガーされたときに実行されるコードです。イベントアクションには、単純な挿入または更新ステートメント、またはストアドプロシージャまたは
benin...end ステートメント ブロックでは、これら 2 つの状況で複数の SQL ステートメントを実行できます。

イベントはアクティブ (オープン) または非アクティブ (クローズ) になります。アクティブとは、イベント スケジューラがイベント アクションを呼び出す必要があるかどうかをチェックすることを意味し、非アクティブとは、イベントの宣言がカタログに保存されているが、スケジューラがそれを呼び出す必要があるかどうかをチェックしないことを意味します。イベントは作成されるとすぐにアクティブになります。アクティブなイベントは 1 回または複数回実行できます。

3.1 作成構文は以下のとおりです

  作成する 
    [定義者 = { ユーザー | 現在のユーザー }] 
    イベント 
    [存在しない場合] 
    イベント名 
    スケジュール通りのスケジュール 
    [完了時に保存しない] 
    [有効 | 無効 | スレーブで無効] 
    [コメント'コメント'] 
    event_bodyを実行します。 
    
  スケジュール: 
    AT タイムスタンプ [+ INTERVAL 間隔] ... 
   | すべての間隔 
    [STARTS タイムスタンプ [+ INTERVAL 間隔] ...] 
    [ENDS タイムスタンプ [+ INTERVAL 間隔] ...] 
    
  間隔: 
    数量 {年 | 四半期 | 月 | 日 | 時間 | 分 | 
         週 | 秒 | 年_月 | 日_時間 | 日_分 | 
         DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}

用語集:

event_name: 作成するイベントの名前 (一意に決定されます)。
スケジュール: タスクをスケジュールします。
スケジュール: イベントの実行時間と頻度を決定します (時間は将来の時間である必要があり、過去の時間は間違っています)。AT と EVERY の 2 つの形式があります。
[ON COMPLETION [NOT] PRESERVE]: オプション。デフォルトは ON COMPLETION NOT PRESERVE です。これは、スケジュールされたタスクの実行後にイベントが自動的に削除されることを意味します。ON COMPLETION PRESERVE では削除されません。
[COMMENT 'comment']: オプション。コメントはイベントを説明するために使用されます。コメントに相当し、最大長は 64 バイトです。
[ENABLE | DISABLE]: イベントのステータスを設定します。デフォルト設定は ENABLE です。システムはこのイベントの実行を試みます。DISABLE: イベントをオフにします。alter を使用して変更できます。
DO event_body: 実行される SQL ステートメント (複合ステートメントでも可)。 CREATE EVENT は、ストアド プロシージャ内で使用する場合は有効です。

3.2 イベントスケジューラの有効化と無効化

3.2.1 MySQL イベント スケジューラ event_scheduler はイベントの呼び出しを担当し、デフォルトでは閉じられています。このスケジューラは、イベントが呼び出されるかどうかを常に監視します。イベントを作成するには、スケジューラを開く必要があります。

mysql> '%event_scheduler%' のような変数を表示します。 
+-----------------+-------+ 
| 変数名 | 値 | 
+-----------------+-------+ 
| イベントスケジューラ | オフ | 
+-----------------+-------+

3.2.2 イベントスケジューラを有効にする

コマンドライン経由

以下のコマンドラインのいずれかを使用できます

グローバルイベントスケジューラを ON に設定します。 
@@global.event_scheduler を ON に設定します。 
グローバルイベントスケジューラを 1 に設定します。 
@@global.event_scheduler を 1 に設定します。

設定ファイルmy.cnfを通じて

event_scheduler = 1 #またはON

スケジューラスレッドの表示

mysql> プロセスリストを表示します。 
+----+-----------------+-----------+--------+--------+--------+------------------+------------------+ 
| ID | ユーザー | ホスト | db | コマンド | 時間 | 状態 | 情報 | 
+----+-----------------+-----------+--------+--------+--------+------------------+------------------+ 
| 2 | root | localhost | NULL | クエリ | 0 | NULL | プロセスリストを表示 | 
| 3 | event_scheduler | localhost | NULL | デーモン | 6 | 空のキューを待機中 | NULL| 
+----+-----------------+-----------+--------+--------+--------+------------------+------------------+

3.2.3 イベントスケジューラをオフにする

コマンドライン経由

以下のコマンドラインのいずれかを使用できます

グローバルイベントスケジューラを OFF に設定します。 
@@global.event_scheduler を OFF に設定します。 
グローバルイベントスケジューラを 0 に設定します。 
@@global.event_scheduler を 0 に設定します。

設定ファイルmy.cnfを通じて

[mysqld]の下に追加

event_scheduler = 0 #またはOFF、DISABLED

スケジューラスレッドの表示

mysql> プロセスリストを表示します。 
+----+------+-----------+---------+-------+-------+-------+-----------------+ 
| ID | ユーザー | ホスト | db | コマンド | 時間 | 状態 | 情報 | 
+----+------+-----------+---------+-------+-------+-------+-----------------+ 
| 2 | root | localhost | NULL | クエリ | 0 | NULL | プロセスリストを表示 | 
+----+------+-----------+---------+-------+-------+-------+-----------------+

3.3 例: 各イベントディスパッチの名前とイベントスタンプを記録するテーブルを作成する

3.3.1 テストテーブルを作成する

mysql> events_list が存在する場合はテーブルを削除します。 
mysql> events_listテーブルを作成します(event_name varchar(20) not null、event_started timestamp not null);

3.3.2 イベント1を作成する(イベントをすぐに開始する)

イベントを作成 event_now 
予定通り 
現在() 
events_list に値 ('event_now'、now()) を挿入します。

イベント実行結果の表示

mysql> events_list から * を選択します。 
+------------+---------------------+ 
| イベント名 | イベント開始 | 
+------------+---------------------+ 
| イベント_now | 2014-07-01 04:06:40 | 
+------------+---------------------+

3.3.3 イベント2を作成する(1分ごとにイベントを開始する)

イベント test.event_minute を作成する 
予定通り 
1分ごとに  
events_list に値 ('event_now'、now()) を挿入します。

イベント実行結果の表示

mysql> events_list から * を選択します。 
+------------+---------------------+ 
| イベント名 | イベント開始 | 
+------------+---------------------+ 
| イベント_now | 2014-07-01 04:26:53 | 
| イベント_now | 2014-07-01 04:27:53 | 
| イベント_now | 2014-07-01 04:28:53 | 
+------------+---------------------+

3.3.3 イベント3を作成する(1秒ごとにイベントを開始する)

イベントを作成 event_now 
予定通り 
1秒ごとに
event_test VALUES(1)にINSERTします。

3.3.4 イベント 4 を作成する (1 秒ごとにストアド プロシージャを呼び出す)

CREATE DEFINER=`root`@`localhost` イベント `eventUpdateStatus` 
1秒ごとにスケジュールどおり 
開始時刻 '2017-11-21 00:12:44' 
完了時に保存 
有効にする 
updateStatus() を呼び出す

3.4 注記:

デフォルトでは、作成されたイベントは現在のライブラリに保存されます。指定したイベントが作成されたライブラリを表示することもできます。

現在のライブラリで作成されたイベントは、イベントの表示を通じてのみ表示できます。

イベントは実行後に解放されます。イベントが即時実行された場合は、実行後に自動的に削除されます。複数の呼び出しや待機中のイベントを表示できます。

2 つのイベントを同時に呼び出す必要がある場合、MySQL はそれらの呼び出し順序を決定します。順序を指定する場合は、1 つのイベントが他のイベントの少なくとも 1 秒後に実行されるようにする必要があります。

再帰的にスケジュールされたイベントの場合、終了日を開始日より前にすることはできません。

選択はイベントに含めることができますが、実行されなかったかのようにその結果は消えます。

4 イベントを表示

現在のライブラリのイベントを表示する

mysql> イベントを表示します。

すべてのイベントを表示

mysql> mysql.event から * を選択します。

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • MySQL スケジュールタスク (EVENT イベント) を詳細に設定する方法
  • MySQL スケジュールタスクの実装と使用例
  • MySQLでスケジュールされたタスクを設定する方法の分析
  • Linux で MySQL スケジュール タスク バックアップ データを実装する方法
  • MySQL スケジュールタスク例チュートリアル
  • Linux で MySQL スケジュールタスクを実装する方法
  • MySQLのスケジュールタスクが正常に実行できない原因の分析と解決

<<:  docker-compose ポートと expose の違いの詳細な説明

>>:  Vue で動的に読み込まれたローカル画像を処理する方法

推薦する

さまざまな Tomcat ログと catalina.out ファイルのセグメンテーションの関係についての簡単な分析

Tomcatログの関係一枚の写真は千の言葉に値する! localhost.{yyyy-MM-dd}....

MySQLのビューとインデックスの使い方と違いの詳細な説明

MySQL ビュー簡単に言えば、MySQL ビューは SELECT コマンドを定義するためのショート...

MySQL の分離レベルの包括的な分析

データベースが同じデータ バッチを同時に追加、削除、および変更すると、ダーティ書き込み、ダーティ読み...

はじめに: HTML の基本的なタグと属性の簡単な紹介

HTML はタグと属性で構成されており、これらを組み合わせてブラウザにページの表示方法を指示します。...

CSSは高さを設定せずにdivを完全に中央に配置することを実現します

必要とする本文の下のdivは垂直方向に中央揃えになっていますdiv 内のテキストを垂直中央に配置する...

CSS オーバーフローラップの新しいプロパティ値をどこでも使用

1.まず、overflow-wrap属性を理解する CSS のoverflow-wrapプロパティは...

aタグ疑似クラスの機能と記述順序は何ですか?

a タグ疑似クラスの役割: 「:link」: 訪問されていないタグの状態。 「:visited」: ...

バッチモードでtopコマンドを実行する方法

top コマンドは、Linux システムのパフォーマンスを監視するために誰もが使用している最適なコマ...

SQL 文を使用してデータを収集する場合の sum 関数と count 関数の if 判定条件の使用法の説明

まず、例を挙げてみましょう(読みたくない場合は、以下の要約だけ読んでください)。 order_typ...

JavaScript で大きなファイルの並列ダウンロードを実装する方法

目次1. HTTP範囲リクエスト1.1 範囲構文2. 大きなファイルをダウンロードする方法2.1 補...

HTML、CSS、RSSフィードが正しいかどうかを確認する無料ツール

この種のエラーに対処するための 1 つの方法は、まずマークアップとスタイルシートを検証することです。...

虫眼鏡ケースのJavaScriptオブジェクト指向実装

この記事では、参考までに、虫眼鏡のJavaScriptオブジェクト指向実装の具体的なコードを紹介しま...

重複したMySQLテーブルをマージして削除する簡単な方法

シナリオ:クロールされたデータは、別のメインテーブルと同じ構造を持つデータテーブルを生成するため、マ...

Firefoxでリンクをクリックしたときに点線の枠線を削除する方法

今日、ブラウザの互換性の問題にいくつか遭遇しました。そのうちの 1 つは奇妙に感じました。Firef...

Vue3+Vantコンポーネントを使用してアプリの検索履歴機能を実装する(サンプルコード)

現在、新しいアプリプロジェクトを開発中です。私にとっても初めてのアプリ開発です。チームで調査と検討を...