【MySQL 8.0マニュアル:SQL文構文:データ定義文】CREATE EVENT構文

9957 ワード

13.1.12イベント構文の作成(CREATE EVENT Syntax)
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文字です.
  • イベント名は大文字と小文字を区別しません.myeventMyEventという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句では、STARTSENDSを使用するか、使用しないことができます.反復イベントがスケジュール間隔内で終了しない場合、結果は同時に実行されるイベントの複数のインスタンスである可能性があります.これが望ましくない場合は、同時に発生するイベントを防ぐメカニズムを確立する必要があります.たとえば、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句は成功したようだ.ただし、サーバが結果の所定のイベントを実行しようとすると、実行に失敗し、エラーが発生します.