【MySQL 8.0マニュアル:SQL文構文:データ定義文】CREATE EVENT構文
9957 ワード
13.1.12イベント構文の作成(CREATE EVENT Syntax)この宣言は、新しいイベントを作成し、スケジュールします.イベントプランナが有効になっていない限り、イベントは実行されません. に依存する場合もある.
有効な
最小CREATE EVENT宣言例:
例:は、 イベント名は大文字と小文字を区別しません. 通常、管理イベント名のルールは、ストレージ・インスタンスの名前と同じです.
1つのイベントが1つのモードに関連付けられます.パターンが
説明: は、存在しない
イベントでは、
説明:
説明:
説明する
通常、イベントが期限切れになると、すぐに削除されます.この動作を上書きするには、
説明する
説明する
説明する
イベントが作成または変更されると、MySQLはsql_を格納します.modeシステム変数を設定し、イベントの実行が開始されたときの現在のサーバSQLモードにかかわらず、常にこの設定を使用してイベントを実行します.
その
ALTER
[DEFINER = { user | CURRENT_USER }]
EVENT event_name
[ON SCHEDULE schedule]
[ON COMPLETION [NOT] PRESERVE]
[RENAME TO new_event_name]
[ENABLE | DISABLE | DISABLE ON SLAVE]
[COMMENT 'string']
[DO event_body]
CREATE EVENT
イベントのパターンを作成するには、EVENT
特権が必要です.SET_USER_ID
またはSUPER
の特権は、DEFINER
の値有効な
CREATE EVENT
宣言の最低要件は次のとおりです.-キーワードCREATE EVENT
には、データベース・モードのイベントを一意に識別するイベント名が付けられています.-イベントの実行時間と頻度を決定するためのON SCHEDULE
句.-イベントによって実行されるSQL文を含むDO
句.最小CREATE EVENT宣言例:
CREATE EVENT myevent
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR
DO
UPDATE myschema.mytable SET mycol = mycol + 1;
例:
myevent
というイベントを作成します.イベントは、作成後に1回実行されます.myschema.mytable
テーブルのmycol
列の値を1ずつインクリメントするSQL文を実行します.event_name
は有効なMySQL識別子でなければなりません.最大長は64文字です.myevent
とMyEvent
という2つのイベントはできません.1つのイベントが1つのモードに関連付けられます.パターンが
event_name
の一部として指定されていない場合、デフォルト(現在)のパターンが想定される.特定のモードでイベントを作成するには、schema_name.event_name
構文を使用してモード限定イベント名を使用します.説明:
CREATE
[DEFINER = { user | CURRENT_USER }]
EVENT
DEFINER
句は、イベント実行時にアクセス権限をチェックするときに使用するMySQLアカウントを指定します.ユーザー値が指定されている場合は、'user_name'@'host_name'
CURRENT_USER
またはCURRENT_USER()
に指定されているMySQLアカウントである必要があります.DEFINER
のデフォルト値は、CREATE EVENT
文を実行するユーザです.これは、明示的に指定されたDEFINER = CURRENT_USER
と同じである.DEFINER
句が指定されている場合、これらの規則は、有効なDEFINERユーザー値を決定します.SET_USER_ID
またはSUPER
の権限がない場合、唯一許可されているユーザー値は自分のアカウントであり、文字通りまたはCURRENT_USER
を使用して指定できます.定義者を別のアカウントに設定することはできません.SET_USER_ID
またはSUPER
の権限を持っている場合は、文法的に有効な勘定科目名を指定できます.アカウントが存在しない場合は、警告が生成されます.DEFINER
アカウントを使用してイベントを作成できますが、そのアカウントが存在しない場合は、イベント実行時にエラーが発生します.イベントでは、
CURRENT_USER()
関数は、DEFINER
ユーザであるイベント実行時に権限をチェックするためのアカウントを返します.説明:
[IF NOT EXISTS]
event_name
IF NOT EXISTS
は、CREATE EVENT
に対してCREATE TABLE
と同じ意味を有する.event_name
という名前のイベントが既に同じモードに存在する場合、何の操作も行わず、エラーも発生しない.(ただし、この場合は警告が発生します.)説明:
ON SCHEDULE schedule
schedule:
AT timestamp [+ INTERVAL interval] ...
| EVERY interval
[STARTS timestamp [+ INTERVAL interval] ...]
[ENDS timestamp [+ INTERVAL interval] ...]
interval:
quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE |
WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE |
DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}
ON SCHEDULE
句は、event_body
がイベントに定義された時間、頻度、および時間を決定する.本条項は2つの形式の1つを採用する.AT timestamp
は、使い捨てイベントに使用される.指定した日付と時刻にのみイベントが実行されるtimestampを指定します.日付と時刻が含まれているか、日付の時刻値に解析された式でなければなりません.このためには、DATETIME
またはTIMESTAMP
のタイプの値を使用できます.日付が経過すると、mysql> SELECT NOW();
+---------------------+
| NOW() |
+---------------------+
| 2006-02-10 23:59:01 |
+---------------------+
1 row in set (0.04 sec)
mysql> CREATE EVENT e_totals
-> ON SCHEDULE AT '2006-02-10 23:59:00'
-> DO INSERT INTO test.totals VALUES (NOW());
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> SHOW WARNINGS\G
*************************** 1. row ***************************
Level: Note
Code: 1588
Message: Event execution time is in the past and ON COMPLETION NOT
PRESERVE is set. The event was dropped immediately after
creation.
、CREATE EVENT
自体が無効な文-何らかの理由でエラーによって失敗すると警告されます.CURRENT_TIMESTAMP
を使用して、現在の日付と時刻を指定します.この場合、イベントが作成されると機能します.現在の日付と時刻に対して、将来の時点で発生するイベントを作成するには、たとえば「今から3週間」などのイベントを作成します.オプションの句を使用します.このセクションは、数と時間単位の2つのセクションで構成され、同じ構文規則に従って関数で使用される時間間隔を管理します.単位キーも、イベントを定義するときにマイクロ秒を使用できない単位を除いて、いくつかの間隔タイプでは、複雑な時間単位を使用することができます.たとえば、「2分および10秒」は+INTERVAL '2:10' MINUTE_SECOND
と表すことができます.マージ間隔.たとえば、AT CURRENT_TIMESTAMP + INTERVAL 3 WEEK INTERVAL 2 DAY
は「これからの3週間と2日間」に相当します.この条項の各部分は+ INTERVAL
で始まる必要があります.EVERY
句:定期的に操作を繰り返す.EVERY
キーワードの後に、interval
キーワードについて前述したように、AT
キーワードが続く.(+INTERVAL
はすべてのことに適用されません.)例えば、EVERY 6 WEEK
とは、EVERY
句において+ INTERVAL
句は使用できないが、+ INTERVAL
句において許容される同じ複雑な時間単位を使用することができることを意味する.EVERY
句は、オプションのSTARTS
句を含むことができる.STARTS
の後にタイムスタンプ値が付いていて、いつから動作を繰り返すべきかを示し、+ INTERVAL
間隔を使用して「今から」の時間量を指定することもできます.例えば、EVERY 3 MONTH STARTS CURRENT_TIMESTAMP + INTERVAL 1 WEEK
は「3ヶ月ごとに、これから1週間から」を意味します.同様に、EVERY 2 WEEK STARTS CURRENT_TIMESTAMP + INTERVAL '6:15' HOUR_MINUTE
は「2週間ごとに、今から6時間15分」を意味します.STARTS
を指定しないのは、STARTS CURRENT_TIMESTAMP
を使用するのと同じです.つまり、イベントの作成時にイベントに指定された操作がすぐに繰り返されます.STARTS
を指定しないのは、STARTS CURRENT_TIMESTAMP
を使用するのと同じです.つまり、イベントの作成時にイベントに指定された操作がすぐに繰り返されます.EVERY
句は、オプションのENDS
句を含むことができる.ENDS
キーワードの後にタイムスタンプ値が付いていて、MySQLイベントがいつ繰り返しを停止すべきかを教えてくれます.ENDS
で+ INTERVAL
の間隔を使用することもできます.例えば「EVERY 12 HOUR STARTS CURRENT_TIMESTAMP + INTERVAL 30 MINUTE ENDS CURRENT_TIMESTAMP + INTERVAL 4 WEEK
」は「12時間ごとに、今から30分、今から4週間で終わる」に相当します.ENDS
を使用しないことは、イベントが無期限に実行されることを意味する.ENDS
は、STARTS
と同様の複雑な時間単位の構文をサポートする.EVERY
句では、STARTS
ENDS
を使用するか、使用しないことができます.反復イベントがスケジュール間隔内で終了しない場合、結果は同時に実行されるイベントの複数のインスタンスである可能性があります.これが望ましくない場合は、同時に発生するイベントを防ぐメカニズムを確立する必要があります.たとえば、GET_LOCK()
関数または行またはテーブルロックを使用できます.ON SCHEDULE
句は、MySQL関数とユーザ変数を内蔵した式を使用して、任意のタイムスタンプまたは間隔値を取得できます.これらの式では、格納された関数やユーザー定義の関数を使用したり、テーブルリファレンスを使用したりしてはいけません.ただし、SELECT FROM DUAL
を使用できます.CREATE EVENT
文とALTER EVENT
文の両方について同じです.この場合、格納された関数に対して、ユーザー定義の関数とテーブルの参照は許可されず、エラーによって失敗します.ON SCHEDULE
句の時間は、現在のセッションのtime_zone
値を使用して説明される.これはイベントタイムゾーンになります.すなわち、イベントスケジューリングに使用されるタイムゾーンであり、実行時にイベント内で有効になります.これらの時間はUTC
に変換され、mysql.event
テーブルのイベントタイムゾーンとともに格納される.これにより、サーバタイムゾーンまたはサマータイムエフェクトの後続の変更にかかわらず、イベントの実行を定義通りに続行できます.説明する
[ON COMPLETION [NOT] PRESERVE]
通常、イベントが期限切れになると、すぐに削除されます.この動作を上書きするには、
ON COMPLETION PRESERVE
を指定します.ON COMPLETION NOT PRESERVE
を使用すると、デフォルトの非永続的な動作のみが明示化されます.説明する
[ENABLE | DISABLE | DISABLE ON SLAVE]
DISABLE
キーワードを使用して、イベントがアクティブになるのを阻止します.ENABLE
キーワードを使用してイベントをアクティブにします.DISABLE ON SLAVE
は、スレーブ・イベントがプライマリ・ステーション上で作成され、スレーブ・ステーションにコピーされるが、スレーブ・ステーション上で実行されないことを示すようにスレーブ・イベントの状態をコピーするように設定される.説明する
[COMMENT 'string']
COMMENT
句を使用して、イベントにコメントを入力します.コメントは最大64文字です.コメントテキストは文字列文字で、引用符で囲まなければなりません.説明する
DO event_body;
DO
句イベントが実行するアクションを指定し、SQL文で構成されます.ストレージ・インスタンスで使用できるほとんどの有効なMySQL文は、所定のイベントの操作文としても使用できます.たとえば、次のイベントは1時間ごとにセッション・テーブルからすべてのローを削除します.このテーブルはsite_activity
モードの一部です.CREATE EVENT e_hourly
ON SCHEDULE
EVERY 1 HOUR
COMMENT 'Clears out sessions table each hour.'
DO
DELETE FROM site_activity.sessions;
イベントが作成または変更されると、MySQLはsql_を格納します.modeシステム変数を設定し、イベントの実行が開始されたときの現在のサーバSQLモードにかかわらず、常にこの設定を使用してイベントを実行します.
その
DO
句の中にALTER EVENT
句を含むCREATE EVENT
句は成功したようだ.ただし、サーバが結果の所定のイベントを実行しようとすると、実行に失敗し、エラーが発生します.