MySQL イベントはスケジュールに従って実行するタスクです。したがって、これらをスケジュール設定済みイベントと呼ぶことがあります。イベントの作成時には、特定の日時に開始して終了し、1 つ以上の定期的な間隔で実行される 1 つ以上の SQL ステートメントを含んだ、名前付きデータベースオブジェクトを作成します。概念的には、このことは Unix の crontab
(「cron ジョブ」とも呼ばれます) や、Windows のタスクスケジューラの考え方に似ています。
この種のスケジュール設定済みのタスクは、「時間トリガー」と呼ばれる場合もあり、これらが時間の経過によってトリガーされるオブジェクトであることを示しています。これは基本的には正しいのですが、セクション20.3「トリガーの使用」で説明している種類のトリガーと混同しないように、イベントの用語を使用します。さらに厳密にいえば、イベントは「時間トリガー」と混同しないようにする必要があります。トリガーは、指定したテーブルで行われるイベントの特定の種類に応じて実行されるステートメントを持つデータベースオブジェクトですが、(スケジュール設定済み) イベントは、指定された時間間隔の経過に応じて実行されるステートメントを持つオブジェクトです。
SQL 標準にはイベントのスケジュール設定への対応はありませんが、ほかのデータベースシステムには先例があり、これらの実装と MySQL Server で見られる実装との間には一定の類似性が認められます。
MySQL イベントには次の主要機能およびプロパティーがあります。
MySQL 5.6 では、イベントはその名前と、イベントに割り当てられているスキーマによって一意に識別されます。
-
イベントは、スケジュールに従って特定のアクションを実行します。このアクションは、SQL ステートメントから構成され、必要に応じて
BEGIN ... END
ブロック内の複合ステートメントにできます (セクション13.6「MySQL 複合ステートメント構文」を参照してください)。イベントのタイミングは一度だけまたは繰り返しのどちらかです。一度だけのイベントは一度しか実行しません。繰り返しのイベントは、一定の間隔でアクションを繰り返し、イベントを繰り返すためのスケジュールに、特定の開始日時と終了日時の両方または一方を割り当てるか、どちらも割り当てないことができます。(デフォルトで、繰り返しイベントのスケジュールは作成されるとすぐに開始し、無効または削除されるまで継続します。)繰り返しイベントがスケジュール間隔内に終了しない場合は、イベントの複数のインスタンスが同時に実行される可能性があります。これが好ましくない場合は、同時インスタンスを回避するためのメカニズムを設けてください。たとえば、
GET_LOCK()
関数や、行またはテーブルのロックを使用できます。 ユーザーは、これらの目的用の SQL ステートメントを使用してスケジュール設定済みイベントを作成、変更、および削除できます。構文が無効なイベント作成および変更ステートメントは失敗し、対応するエラーメッセージが表示されます。ユーザーは、実際には自身が保有していない権限を必要とするステートメントを、イベントのアクションに含めることがあります。イベントの作成または変更ステートメントは成功しますが、イベントのアクションは失敗します。詳細は、セクション20.4.6「イベントスケジューラと MySQL 権限」を参照してください。
-
イベントのプロパティーの多くは、SQL ステートメントを使用して設定または変更できます。これらのプロパティーには、イベントの名前、タイミング、持続性 (つまり、そのスケジュールの有効期限が切れたあとも保持されるかどうか)、ステータス (有効または無効)、実行するアクション、および割り当て先のスキーマが含まれます。セクション13.1.2「ALTER EVENT 構文」を参照してください。
イベントのデフォルトの定義者は、イベントが変更されていない場合は、イベントを作成したユーザーであり、変更されている場合は、定義者はそのイベントに影響する
ALTER EVENT
ステートメントを最後に発行したユーザーです。イベントが定義されているデータベースに対するEVENT
権限を保有するすべてのユーザーは、そのイベントを変更できます。セクション20.4.6「イベントスケジューラと MySQL 権限」を参照してください。 イベントのアクションステートメントには、ストアドルーチン内で許可されているほとんどの SQL ステートメントを含めることができます。制限については、セクションD.1「ストアドプログラムの制約」を参照してください。