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 で動的に読み込まれたローカル画像を処理する方法

推薦する

すべてのブラウザに対応したデータURIとMHTMLの完全なソリューション

データURI Data URI は、小さなファイルをドキュメントに直接埋め込むために RFC 239...

テキストスクロール後の自動停止効果の例

効果は非常にシンプルで、次のコードを自分のページにコピーして実行するだけです。コードをコピーコードは...

Mac 向け MySQL のインストールと設定のチュートリアル

この記事では、MacでのMySQLインストールチュートリアルを参考までに紹介します。具体的な内容は次...

CSS3 で less のテキストの長い影を実装する

この記事では主に、CSS3 LESS で長いテキストの影を実装する方法を紹介し、皆さんと共有します。...

MySQL インデックスの左端原則のサンプルコード

序文最近、MySQL のインデックスについて読んでいました。結合されたインデックスを見ると、左端の原...

HTML H タイトルタグの使用

H タグ、特に h1 タグの使用は常に議論の的となっている問題であり、私たちが研究する価値のある問題...

Vue3は独自のページングコンポーネントをカプセル化します

この記事の例では、vue3 が独自のページングコンポーネントをカプセル化する具体的なコードを参考まで...

CentOS7にPostgreSQL11をインストールする方法

CentOS 7にPostgreSQL 11をインストールする PostgreSQL: 世界で最も先...

MySQLのあいまいクエリインデックスの失敗の問題を解決するいくつかの方法

% ワイルドカードを使用すると、インデックス失敗の問題が発生することがよくあります。ここでは、lik...

...

MAC で MySQL の初期パスワードを変更する方法

問題の説明: Macを購入し、初めてMySQLをインストールしました。初期パスワードが分かりません。...

シンプルな時計を実装するJavaScript

この記事では、JavaScriptでシンプルな時計を実装するための具体的なコードを参考までに紹介しま...

HTML シンプルショッピング数量アプレット

この記事では、参考までにシンプルなHTMLショッピング数量アプレットを紹介します。具体的な内容は次の...

MySQL のクエリパフォーマンスに対する制限の影響

I. はじめにまず、MySQL のバージョンについて説明します。 mysql> バージョンを選...

フレックスレイアウトのスペース間の最後の行の左揃えの問題を解決する方法

まずはコードと効果を見てみましょう↓ <スタイル> 。主要 { アウトライン: 1px ...