MySQL スケジュールタスク (EVENT イベント) を詳細に設定する方法

MySQL スケジュールタスク (EVENT イベント) を詳細に設定する方法

1. イベントとは何ですか?

MySQL 5.1.6以降、非常にユニークな機能である事件調度器スケジューラが追加されました。この機能を使用すると、特定のタスク (レコードの削除、データ統計レポート、データのバックアップなど) をスケジュールされた時間に実行して、オペレーティング システムのスケジュールされたタスクでのみ実行できる作業を置き換えることができます。
MySQL のイベント スケジューラはタスクを毎秒正確に実行できますが、オペレーティング システムのスケジュールされたタスク (Linux の cron など) は 1 分に 1 回しか正確に実行できないことに注意してください。リアルタイムデータ(株価、オッズ、スコアなど)に対する要件が高いアプリケーションに非常に適しています。

イベントは、特定のタスクを実行するために特定の期間に基づいてトリガーされるのに対し、トリガーは特定のテーブルによって生成されたイベントに基づいてトリガーされるため、一時トリガーと呼ばれることもあります。これが違いです。

2. 「イベント」機能を有効にする

「イベント」機能を使用する前に、event_schedulerが有効になっていることを確認する必要があります。

1. 機能が有効になっているかどうかを確認します。

-- 方法 1 SELECT @@event_scheduler;
-- 方法 2 SHOW VARIABLES LIKE 'event%';

以下のように「ON」と表示された場合、機能がオンになっていることを意味します。

mysql> @@event_scheduler を選択します。
+-------------------+
| @@イベント スケジューラ |
+-------------------+
| オン |
+-------------------+
セット内の 1 行 (0.00 秒)

mysql> 'event%' のような変数を表示します。
+-----------------+-------+
| 変数名 | 値 |
+-----------------+-------+
| イベントスケジューラ | オン |
+-----------------+-------+
セット内の 1 行 (0.00 秒)

2. 機能コマンドを有効または無効にする:

-- 機能コマンドを有効にする:
グローバルイベントスケジューラを 1 に設定します。
グローバルイベントスケジューラを ON に設定します。
-- 機能を無効にするコマンド:
グローバルイベントスケジューラを 0 に設定します。
グローバルイベントスケジューラを OFF に設定します。

もちろん、コマンドを開いてデータベースを再起動すると自動的に閉じられます。

持久化開啟方式: 以下に示すように、my.cnf 構成ファイルにevent_scheduler=1を書き込みます。

ここに画像の説明を挿入

よく使用されるイベント操作コマンド:

  • 指定されたイベントをオフにします: ALTER EVENT イベント名 ON COMPLETION PRESERVE DISABLE;
  • 指定されたイベントを有効にします: ALTER EVENT イベント名 ON COMPLETION PRESERVE ENABLE;
  • 現在のイベントを表示: イベントを表示;

3. イベント - SQL構文の作成

以下はEVENTイベント作成文です。一見するとかなり複雑です。分解して解釈してみましょう。

イベントを作成 [存在しない場合] イベント名
   ON SCHEDULEスケジュール(スケジュール時間設定)
   [完了時に保存しない]
   [有効 | 無効 | スレーブで無効]
   [コメント'コメント']
   SQLステートメントを実行します。

SQL構文例示する
定義者オプション、指定されたユーザーに権限を与える
存在しない場合オプション。作成するイベントが存在するかどうかを判断するために使用されます。
イベント イベント名必須。イベント名を指定します。event_name の最大長は 64 文字です。event_name が指定されていない場合は、現在の MySQL ユーザー名 (大文字と小文字は区別されません) がデフォルトになります。
スケジュール通りのスケジュール必須です。ここでのスケジュールは、実行時間と時間間隔を定義するために使用されます。以下で詳しく説明します。
完了時に保存しないオプションで、イベントが 1 回実行された後の処理方法を構成します。
on completion preserve を使用すると、イベントの有効期限が切れると、イベントは無効になりますが、イベントは引き続き存在します。on completion not preserve を使用すると、イベントの有効期限が切れると、イベントは自動的に削除されます。
スレーブで有効、無効、無効オプション。イベントの属性を指定するために使用されます。
ENABLE はイベントが有効であることを意味します。つまり、スケジューラはイベントを呼び出す必要があるかどうかを確認します。
DISABLE はイベントが無効であることを意味します。つまり、イベント宣言はディレクトリに保存されますが、スケジューラはそれを呼び出す必要があるかどうかをチェックしません。
DISABLE ON SLAVE は、イベントがスレーブで無効になっていることを示します。これら 3 つの選択肢のいずれも指定しない場合、イベントは作成後すぐにアクティブになります。
コメント 'コメント'オプション。イベントのコメントを定義するために使用します。
イベント本体を実行する必須。イベントがトリガーされたときに実行されるコードを指定するために使用されます。有効な SQL ステートメント、ストアド プロシージャ、または実行がスケジュールされているイベントを指定できます。複数の文が含まれている場合は、BEGIN...END複合構造を使用できます。

schedule時間設定構文: スケジュール時間設定にはATEVERYが含まれます

AT タイムスタンプ [+ INTERVAL 間隔] ...
 | すべての間隔
 [STARTS タイムスタンプ [+ INTERVAL 間隔] ...]
 [ENDS タイムスタンプ [+ INTERVAL 間隔] ...]


-- INTERVAL に含まれる時間単位は次のとおりです。
{年 | 四半期 | 月 | 日 | 時間 | 分 |
 週 | 秒 | 年_月 | 日_時間 | 日_分 |
 DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}

1. 作成 - 単一のスケジュールされた実行イベント

AT TIMESTAMP 時間文字列 [+ INTERVAL INTERVAL]

AT TIMESTAMP は、イベントが 1 回だけ実行されることを意味します。TIMESTAMP は特定の時点を表し、その後に時間間隔を続けることで、この時間間隔後にイベントが発生することを示すことができます。 [+ INTERVAL INTERVAL]は遅延トリガー時間を示します。

TIMESTAMP は特定の文字列と一緒に使用されることに注意してください。特定の文字列でない場合 (現在の時刻を取得する CURRENT_TIMESTAMP など)、TIMESTAMP は追加されません。

例 1: demo_1119 テーブルにデータ行を挿入します。実行時間: 2020-11-20 00:00:00

イベントを作成 demo_event2 
タイムスタンプ「2020-11-20 00:00:00」のスケジュールどおり 
`demo_1119` (`id`, `name`, `createTime`) VALUES (null, '陈哈哈', NOW()) に INSERT してください

結果クエリ:

mysql> demo_1119 から * を選択します。
+-----+-----------+---------------------+
| ID | 名前 | 作成時間 |
+-----+-----------+---------------------+
| 145 | 陳哈哈 | 2020-11-20 00:00:00 |
+-----+-----------+---------------------+
セット内の行数は 9 です (0.00 秒)

例 2: demo_1119 テーブルにデータ行を挿入します。実行時間は現在の時刻から 5 時間後です。

イベントを作成 demo_event2 
スケジュールどおり、CURRENT_TIMESTAMP + INTERVAL 5 時間
`demo_1119` (`id`, `name`, `createTime`) VALUES (null, '陈哈哈', NOW()) に INSERT してください

2. 作成 - ループ時間指定実行イベント

間隔ごとに [開始タイムスタンプ] [終了タイムスタンプ]

EVERY表示循環執行該事件。STARTS 句は開始時刻を指定するために使用され、 ENDS句は終了時刻STARTS指定するために使用されます。

例1: これからは、10秒ごとにdemo_1119テーブルにデータ行を挿入します。

イベントを作成 demo_event3 
スケジュールどおり10秒ごとに 
完了時に保存 
`demo_1119` (`id`, `name`, `createTime`) VALUES (null, '陈哈哈', NOW()) に INSERT してください
mysql> demo_1119 から * を選択します。
+-----+-----------+---------------------+
| ID | 名前 | 作成時間 |
+-----+-----------+---------------------+
| 145 | 陳哈哈 | 2020-11-19 11:10:39 |
| 146 | 陳哈哈 | 2020-11-19 11:10:49 |
| 147 | 陳哈哈 | 2020-11-20 11:10:59 |
| 148 | 陳哈哈 | 2020-11-20 11:11:09 |
| 149 | 陳哈哈 | 2020-11-20 11:11:19 |
| 150 | 陳哈哈 | 2020-11-20 11:11:29 |
| 151 | 陳哈哈 | 2020-11-20 11:11:39 |
+-----+-----------+---------------------+
セット内の行数は 9 です (0.00 秒)

例2: 2020-11-20 12:00:00から、10分ごとにdemo_1119テーブルにデータ行を挿入します。

イベントを作成 demo_event4 
スケジュールどおり 10 分ごとに開始 '2020-11-20 12:00:00' 
完了時に保存 
`demo_1119` (`id`, `name`, `createTime`) VALUES (null, '陈哈哈', NOW()) に INSERT してください
mysql> demo_1119 から * を選択します。
+-----+-----------+---------------------+
| ID | 名前 | 作成時間 |
+-----+-----------+---------------------+
| 152 | 陳哈哈 | 2020-11-20 12:00:00 |
| 153 | 陳哈哈 | 2020-11-20 12:10:00 |
| 154 | 陳哈哈 | 2020-11-20 12:20:00 |
| 155 | 陳哈哈 | 2020-11-20 12:30:00 |
| 156 | 陳哈哈 | 2020-11-20 12:40:00 |
+-----+-----------+---------------------+
セット内の行数は 5 です (0.00 秒)

例 3: 現在の時刻の 1 時間後から、10 分ごとに demo_1119 テーブルにデータ行を挿入します。テスト済みで利用可能なので、冗長なクエリ データは投稿しません。

イベントを作成 demo_event5 
スケジュールに従って 10 分ごとに開始 CURRENT_TIMESTAMP+INTERVAL 1 時間 
完了時に保存 
`demo_1119` (`id`, `name`, `createTime`) VALUES (null, '陈哈哈', NOW()) に INSERT してください

例4: 現在の時刻から1日を開始し、1時間ごとにdemo_1119テーブルにデータ行を挿入し、3日後に終了します。

イベントを作成 demo_event5 
1時間ごとにスケジュールどおり 
開始時刻: CURRENT_TIMESTAMP+INTERVAL 1日 
終了CURRENT_TIMESTAMP+INTERVAL 3 DAY 
完了時に保存 
`demo_1119` (`id`, `name`, `createTime`) VALUES (null, '陈哈哈', NOW()) に INSERT してください

例5: 毎日0:00にdemo_1119テーブルのデータをクリアする

イベントを作成 demo_event5 
スケジュールに従って 1 日ごとに開始 '2020-11-20 00:00:00' 
完了時に保存 
テーブル `demo_1119` を切り捨てます

3. イベントを変更する

変更イベント ステートメントは作成ステートメントとまったく同じで、構文は次のとおりです。

ALTER EVENT イベント名
   [ONSCHEDULEスケジュール]
   [古い名前から新しい名前へ]
   [完了時に保存しない]
   [コメント'コメント']
   [有効 | 無効]
   [DO sql_statement]

イベント タスクをオフにします: ALTER EVENT イベント名 ON COMPLETION PRESERVE DISABLE;

イベント タスクの有効化: ALTER EVENT イベント名 ON COMPLETION PRESERVE ENABLE;

4. イベントを削除する

DROP EVENT [存在する場合] event_name

4. イベント - Navicat で作成 (推奨)

多くの人はコマンドラインで SQL 文を入力するのが好きで、それによってプロフェッショナルな感覚を得ていますが、リーダーによって道徳的に誘拐される可能性もあります~~

リーダーの中には、従業員が Google を使うのはクールで印象的だが、Baidu を使用して csdn を検索するのは低レベルだと考える人もいます。 しかし、初心者としては、私は今でも Navicat ガジェットと Baidu を使うのが好きです。さて、これ以上前置きはこれくらいにして、Navicat が EVENT イベントを作成する方法を見てみましょう。

下図のように、右クリックして新しいイベントを作成します

ここに画像の説明を挿入

作成イベントの定義列は、1 つ以上の SQL ステートメント、ストアド プロシージャなどを含めることができる実行 SQL を記述するために使用されます。計劃列は、イベントのトリガー時間を定義するために使用されます。以下のように、実行時に挿入ステートメントを定義しました。

ここに画像の説明を挿入

もちろん、間にセミコロンを入れて複数の SQL ステートメントを同時に記述することもできます。 BEGIN で始まり、END で終わります。

ここに画像の説明を挿入

プラン欄を開いてみると、見覚えがありませんか?これについては前のモジュールで説明しました。友人たちにさらに深い印象を持ってもらうために、復習してみましょう。

ここに画像の説明を挿入

パラメータの説明:

AT : イベントが 1 回だけ実行されることを示します。特定の時間を設定することも、 CURRENT_TIMESTAMPを使用して現在の時刻を表し、その後に時間interval (この時刻からどのくらい後にイベントが発生するかを示す、遅延トリガー時間を示す) を指定することもできます。

  • EVERY : イベントを繰り返し実行します。STARTS STARTSを使用して開始時刻を指定します。
  • ENDS句は終了時刻を指定するために使用されます。
  • interval :表示從現在開始時間延遲多久以后的一個時間點。その値は数値と単位で構成されます。たとえば、今から 4 週間後を示すには「4 WEEK」を使用し、今から 1 時間 10 分後を示すには「'1:10' HOUR_MINUTE」を使用します。間隔距離は DATE_ADD() 関数によって決定されます。

INTERVAL に含まれる時間単位は次のとおりです。

年 | 四半期 | 月 | 日 | 時間 | 分 | 週 | 秒 |
年_月 | 日_時間 | 日_分 |
日_秒 | 時間_分 | 時間_秒 | 分_秒

では、覚えやすいようにいくつか例を挙げてみましょう: 例 1: demo_1119 テーブルにデータ行を挿入、実行時間: 2020-11-20 00:00:00

ここに画像の説明を挿入

2: demo_1119 テーブルにデータ行を挿入します。実行時間は現在の時刻から 5 時間後です。

ここに画像の説明を挿入

例3: これからは、10秒ごとにdemo_1119テーブルにデータ行を挿入します。

ここに画像の説明を挿入

例4: 2020-11-20 12:00:00から、10分ごとにdemo_1119テーブルにデータ行を挿入します。

ここに画像の説明を挿入

例 5: 現在の時刻の 1 時間後から、10 分ごとに demo_1119 テーブルにデータ行を挿入します。

ここに画像の説明を挿入

例6: 現在の時刻から1日を開始し、1時間ごとにdemo_1119テーブルにデータ行を挿入し、3日後に終了します。

ここに画像の説明を挿入

例7: 毎日0:00にdemo_1119テーブルのデータをクリアする

ここに画像の説明を挿入

これで、MySQL のスケジュールされたタスク (EVENT イベント) の設定方法に関するこの記事は終了です。MySQL のスケジュールされたタスクに関する関連情報をさらに知りたい場合は、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySQL ストアド プロシージャ、トリガー、イベント スケジューラの入門ガイド
  • 初心者から熟練者まで使えるMySQLデータベーストリガー
  • MySQLトリガートリガー例の詳細な説明
  • MySQL トリガーの使用方法と利点と欠点の紹介
  • バックアップと削除のためにリアルタイムでステートメントを検出するMySQLトリガーの考え方の詳細な説明
  • MySQLはイベントを使用してスケジュールされたタスクを完了します
  • MySQLのイベントスケジューラEVENTを理解する
  • MySQL の計画タスクとイベント スケジュール例の分析
  • MySQL イベントとトリガーのトピックの絞り込み

<<:  W3C チュートリアル (6): W3C CSS アクティビティ

>>:  CSS はコンテナ レベル (div...) タグを 1 つの位置 (ページの右端) に固定します。

推薦する

WeChatアプレットリクエストの前処理方法の詳細な説明

質問一部のページでは、onload でデータを要求してからビューをレンダリングするため、ミニプログラ...

mysql データ型変換の実装

1. 問題下図のような表があり、結果値がreference_high値より大きいデータを見つける必要...

nginx ベースのブラウザネゴシエーションキャッシュプロセスの詳細な説明

この記事は主に、nginx に基づいてブラウザネゴシエーションキャッシュを設定する詳細なプロセスを紹...

仕事の効率を上げるJS略語スキル20選

目次複数の変数を同時に宣言する場合は、1 行に短縮できます。分割代入は複数の変数に同時に値を割り当て...

CSS 配置レイアウト (位置、配置レイアウト スキル)

1. ポジショニングとは何ですか? CSS の position 属性には、absolute/re...

Docker イメージの作成、アップロード、プル、およびデプロイ操作 (Alibaba Cloud を使用)

学習プロセス中にプッシュ イメージが常にタイムアウトすることがわかったため、Alibaba Clou...

MySQL 最適化 query_cache_limit パラメータの説明

クエリキャッシュ制限query_cache_limit は、単一のクエリで使用できるバッファ サイズ...

MySQL の int、char、varchar のパフォーマンスを比較する

インターネットには、真実のように見える「噂」がたくさんあります。もちろん、悪意のあるものではありませ...

HTML テーブルタグチュートリアル (19): 行タグ

<TR> タグの属性は、次の表に示すように、テーブル内の各行のプロパティを設定するために...

モバイル端末の水平および垂直画面ビューポート検出を決定するための js のいくつかの方法

目次1. 異なるビューポートを取得する方法2. 水平画面と垂直画面のJavaScript検出3. 水...

Linux システムでログを手動でスクロールする方法

ログローテーションは、Linux システムでは非常に一般的な機能です。ログローテーションは、システム...

CocosCreatorでリストを作成する方法

CocosCreator バージョン: 2.3.4 Cocos には List コンポーネントがない...

HTTPS の原則の説明

HTTPS ウェブサイトの構築コストが下がるにつれて、ほとんどのウェブサイトが HTTPS プロトコ...

jQueryは居住地を選択するためのドロップダウンボックスを実装します

居住地を選択するためのドロップダウンボックスをjQueryで実装するための具体的なコードは参考までに...

Apache FlinkCEP でタイムアウトステータス監視を実装するための詳細な手順

CEP - 複合イベント処理。ご注文後、一定期間内にお支払いの確認が取れませんでした。タクシーの配...