ホームページ > バックエンド開発 > PHPチュートリアル > MySQLイベントを操作します

MySQLイベントを操作します

尊渡假赌尊渡假赌尊渡假赌
リリース: 2025-03-01 08:48:11
オリジナル
836 人が閲覧しました

Working with MySQL Events

コアポイント

    MySQL 5.1.6以降に導入されたMySQLイベントは、1回限りまたは定期的な実行をスケジュールできるタイムトリガーであり、スケジュールされたタスクとCRONジョブに代わるものを提供します。それらを使用して、バックアップを作成したり、廃止されたレコードを削除したり、レポートデータを要約したりすることができます。
  • MySQLイベントスケジューラは、実行されるイベントを常に検索するバックグラウンドプロセスです。コマンドを発行することで開始でき、
  • を使用して閉じることができます。そのステータスは、MySQLプロセスリストで表示できます。 SET GLOBAL event_scheduler = ON; SET GLOBAL event_scheduler = OFF;イベントを作成する場合、イベントを作成したMySQLユーザーが実行アクセス許可を持っていることのみが操作を実行できることに注意してください。イベント名の長さは64文字に制限されており、ケースに依存しないユニークである必要があります。別のイベントによってイベントを作成、変更、または削除することはできません。イベントスケジュールをセットアップするときに、機能またはユーザー定義の関数を保存することはできません。
  • MySQLイベントは、ブログ投稿の公開を計画するなど、実際のシナリオで使用できます。記事を公開するときにトリガーされるMySQLイベントを使用することにより、非効率的なCronスクリプトを必要とせずにブログ投稿の公開を効果的に管理できます。データベースにブログエントリを追加するときにイベントを作成できます。後でブログ投稿を編集すると、イベントを削除して新しいスケジュール時間でイベントを再追加できます。
  • MySQLイベントがMySQL 5.1.6に追加され、スケジュールされたタスクとCronジョブに代わるものが提供されました。イベントを使用して、バックアップを作成したり、廃止されたレコードを削除したり、レポートデータを要約したりすることができます。特定の条件に応じて実行される標準トリガーとは異なり、イベントは時間の経過によってトリガーされるオブジェクトであり、時々
時間トリガー

と呼ばれます。サーバーのトラフィックが低いときに、1回限りまたは定期的にイベントをスケジュールすることができます。この記事では、イベントの使用を開始するために知っておくべきことを説明します。イベントスケジューラを開始し、1回限りまたは複数の実行イベントを追加し、既存のイベントを表示し、イベントを変更します。また、MySQLイベントを使用する実用的な例として、計画されたブログ投稿を使用する方法も共有します。

イベントスケジューラを開始

MySQLイベントスケジューラは、バックグラウンドで実行され、実行されるイベントを常に探しているプロセスです。イベントを作成またはスケジュールする前に、次のコマンドを発行して最初にスケジューラを開く必要があります。

同様に、すべてのイベントを閉じるには、次のことを使用できます。

mysql> SET GLOBAL event_scheduler = ON;
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
イベントスケジューラを起動した後、MySQLプロセスリストでそのステータスを表示できます。

mysql> SET GLOBAL event_scheduler = OFF;
ログイン後にコピー
ログイン後にコピー

使用イベント

mysql> SHOW PROCESSLIST
...
     Id: 79
   User: event_scheduler
   Host: localhost
     db: NULL
Command: Daemon
   Time: 12
  State: Waiting on empty queue
   Info: NULL
ログイン後にコピー
ログイン後にコピー

イベントを作成する場合、イベントを作成したMySQLユーザーが実行権限を持っていることのみが操作を実行できることに注意する必要があります。他のいくつかの制限には、次のものが含まれます

  • イベント名の長さは64文字に制限されています。
  • MySQL 5.1.8から始めて、イベント名はケースに依存しないままです。
  • 別のイベントでイベントを作成、変更、または削除することはできません。

イベントスケジュールを設定する場合、保存された関数またはユーザー定義関数を参照できません。

イベントを作成

次の例では、イベントを作成します

mysql> SET GLOBAL event_scheduler = ON;
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
このイベントは、イベントが作成されてから1時間後に1回実行されます。

およびBEGINステートメントは、指定された時間に実行される1つ以上のクエリを中心に展開します。セミコロンはENDステートメントを終了するために必要であるため、クライアントを介して操作する場合は、UPDATEステートメントを発行する前にセパレーターを切り替えてからバックバックする必要があります。 CREATE EVENTを使用して、既存のすべてのイベントのリストを表示できます。 SHOW EVENTS

mysql> SET GLOBAL event_scheduler = OFF;
ログイン後にコピー
ログイン後にコピー
イベントは、有効期限後に自動的に削除されます。たとえば、

句を使用して他の状況を明示的に宣言しない限り、:ON COMPLETION

この例では、イベントの有効期限が切れていても、データベースに残ります。これにより、後で変更して再度実行できます。自分でイベントを永久に削除するには、
mysql> SHOW PROCESSLIST
...
     Id: 79
   User: event_scheduler
   Host: localhost
     db: NULL
Command: Daemon
   Time: 12
  State: Waiting on empty queue
   Info: NULL
ログイン後にコピー
ログイン後にコピー

を使用できます。 DROP EVENT

定期的なイベントを指定するには、
DELIMITER |

CREATE EVENT myevent
    ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR
    DO
      BEGIN
        UPDATE mytable SET mycol = mycol + 1;
      END |

DELIMITER ;
ログイン後にコピー
句を使用できます。

EVERYイベントを1回または永久に実行する代わりに、

および
mysql> SHOW EVENTS
********************** 1. row **********************
                  Db: mysql
                Name: myevent
             Definer: dbuser@localhost
           Time zone: SYSTEM
                Type: ONE TIME
          Execute At: 2011-10-26 20:24:19
      Interval Value: NULL
      Interval Field: NULL
              Starts: NULL
                Ends: NULL
              Status: ENABLED
          Originator: 0
character_set_client: utf8
collation_connection: utf8_general_ci
ログイン後にコピー
条項を使用して、特定の期間のみ有効な定期的なイベントをスケジュールすることもできます。

この例では、定期的なイベントが明日から始まり、1年ごとに1年間実行されます。タイミングに関しては、指定された間隔は、年、月、週、日、時間、分、瞬間、または2番目です。キーワードは特異な形で与えられていることを忘れないでください。 START END

イベントを更新
CREATE EVENT myevent
    ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR
    ON COMPLETION PRESERVE
    DO
      BEGIN
        UPDATE mytable SET mycol = mycol + 1;
      END |
ログイン後にコピー

INTERVAL 5 MINUTE既存のイベントを削除して再作成する代わりに、既存のイベントの動作を変更する場合は、

を使用できます。たとえば、前のイベントのスケジュールを変更するには、将来の午前1時から始まる月に1回実行するには、次のコマンドを使用できます。

異なるクエリセットでイベントを更新するには、使用できます。 イベントの名前を変更するには、句を使用できます。

ALTER EVENTブログ投稿プラン

DROP EVENT myevent;
ログイン後にコピー

実用的な例を示すために、ブログがあり、将来のいつか公開される投稿をスケジュールするオプションが必要だとします。これを達成する1つの方法は、タイムスタンプと公開されたフラグをデータベースレコードに追加することです。 Cronスクリプトは1分あたり1回実行され、タイムスタンプをチェックし、公開すべき記事のフラグを切り替えます。しかし、これは非効率的であるようです。これを行う別の方法は、記事を公開するときにトリガーされるMySQLイベントを使用することです。ブログエントリフォームにはチェックボックスがある場合があり、それを選択することは、これが計画された投稿であることを意味します。さらに、フォームには、投稿する投稿の日付と時刻を入力するための入力フィールドがあります。受信スクリプトは、データベースにブログエントリを追加し、イベントを管理してスケジュールする責任があります(すぐに投稿された投稿ではない場合)。関連するコードは次のとおりです

mysql> SET GLOBAL event_scheduler = ON;
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
データベースに記事を保存すると、停止された状態に保存されます。これにより、イベントをスケジュールする機会が与えられます(計画された投稿の場合)。そうしないと、ステータスをすぐに公開するように更新できます。後で記事を編集したい場合は、

を使用してイベントを削除して、新しいスケジュールされた時間で再添加することができます。 DROP EVENT IF EXISTS

概要

MySQLイベントとは何か、独自のイベントを作成および管理する方法を確実に理解する必要があります。イベントはCronジョブやスケジュールされたタスクを置き換えることはできませんが、イベントは外部コード(PHPスクリプトなど)を実行できないため、MySQLデータベースに固有の時間関連タスクの代替品です。いつものように、あなたがもっと学ぶことに興味があるなら、必ず公式のドキュメントを読んでください。

Garsya / ShutterStockの写真 MySQLイベント(FAQ)

の使用に関するFAQ (記事が長すぎて擬似オリジナルの目標と一致しないため、FAQパーツはここで省略されています。FAQパーツの内容は元のテキストと非常に反復的です。

以上がMySQLイベントを操作しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート