10bet网址
MySQL 5.6リファレンスマニュアル
本手册下载
PDF (Ltr)- 26.8 mb
PDF (A4)- 26.8 mb
HTML下载(TGZ)- 7.2 mb
HTML下载(邮政编码)- 7.2 mb


13.1.11 create event構文

创建[definer = {]用户| current_user}]事件[如果不存在]event_name按计划时间表[on completion [not] preserve] [enable | disable | disable on slave][注释'评论']做event_body时间表:在时间戳[+间隔时间间隔)……|每时间间隔(开始时间戳[+间隔时间间隔]…][ENDS时间戳[+间隔时间间隔]…]时间间隔数量{year | quarter | month | day | hour | minute | week | second | year_month | day_hour | day_minute | day_second | hour_minute | hour_second | minute_second}

このステトメントは,新しいルします。このベントは,イベントスケジューラが有効になっていないかぎり実行されません。イベントスケジューラのステータスをチェックし、必要に応じてそれを有効にする方法については、セクション20.4.2 " econfベントスケジュラの構成"を参照してください。

创建事件には、ベントが作成されるスキ、マに対する事件権限が必要です。このセクションのあとの方で説明されているように,定义者値によっては超级権限も必要になる可能性があります。

有効な创建事件ステトメントの最小要件は次のとおりです。

  • キワド创建事件に加えて,デ。

  • ベントが実行される時期と頻度を決定する按计划句。

  • ereplicationベントによって実行されるSQLステトメントを含む句。

最小限の创建事件ステトメントの例を次に示します。

在当前时间戳+时间间隔1小时内创建事件。SET mycol = mycol + 1;

前のステトメントは,myeventという名前の邮箱ベントを作成します。このベントは,myschema.mytableテブルのmycolカラムの値を1増分するSQLステートメントを実行することによって(その作成の1時間後に)1回実行されます。

event_nameは,最大長が64文字の有効なMySQL識別子である必要があります。ベント名は大文字と小文字が区別されないため,myeventMyEventという名前の2の。一般に,ベント名を管理するルルは,ストアドルチンの名前の場合と同じです。セクション9.2 "スキマオブジェクト名"を参照してください。

帐号ベントはスキ帐号マに関連付けられています。event_nameの一部としてスキマが示されていない場合は,デフォルトの(現在の)スキマと見なされます。ベントを特定のスキマ内に作成するには,schema_nameevent_name構文を使用して、その。

定义者句は,イベントの実行時にアクセス権限を確認するときに使用されるMySQLアカウントを指定します。用户値を指定する場合は,user_name“@”host_name格兰特ステトメントで使用されるのと同じ形式),CURRENT_USER,またはCURRENT_USER ()として指定されたMySQLアカウントにしてください。定义者のデフォルト値は,创建事件ステトメントを実行するユザです。これは,明示的に定义者= CURRENT_USERを指定するのと同じです。

定义者句を指定した場合は,次のルルによって有効な定义者ユザの値が決定されます。

  • 超级権限がない場合,許可される唯一の用户値は,リテラルで指定するか,またはCURRENT_USERを使用して指定した自分のアカウントです。定義者をほかのアカウントに設定することはできません。

  • 超级権限がある場合は,構文として有効な任意のアカウント名を指定できます。そのアカウントが実際に存在しない場合は,警告が生成されます。

  • 存在しない定义者アカウントでイベントを作成することはできますが,そのアカウントが存在しない場合は,イベント実行時にエラーが発生します。

ベントのセキュリティの詳細は,セクション20.6 "ストアドプログラムおよびビュのアクセスコントロル"を参照してください。

ベント内では,CURRENT_USER ()関数が,ベント実行時に権限を確認するために使用されるアカウント(定义者ユザ)を返します。イベント内のユーザー監査については,セクション6.3.13 " SQLベスのMySQLアカウントアクティビティの監査"を参照してください。

创建事件での如果不存在には,创建表での場合と同じ意味があります。event_nameという名前のイベントが同じスキーマ内にすでに存在する場合,アクションは実行されず,エラーも発生しません。(ただし,このような場合は警告が生成されます)。

按计划句は、その以及ベントに対して定義されたevent_bodyを繰り返す時期,頻度,および期間を決定します。この句は,次の2の形式のいずれかを取ります。

  • 1回限りのベントには,时间戳が使用されます。これは,そのイベントが时间戳で指定された日付と時間に1回だけ実行されることを指定します。この値は,日付と時間の両方を含んでいるか,またはdatetime値に解決される式である必要があります。この目的には,DATETIMEまたは时间戳型のどらかの値を使用できます。日付が過去の日付である場合は,次に示すように,警告が発生します。

    现在mysql > SELECT ();+---------------------+ | 现在 () | +---------------------+ | 2006-02-10 23:59:01  | +---------------------+ 1行集(0.04秒)mysql >创建事件e_totals - >安排在“2006-02-10 23:59:00”——>做插入测试。现在总数值(());查询好,0行影响,1警告(0.00秒)mysql >显示警告\ G  *************************** 1。行***************************级别:备注代码:1588消息:事件执行时间为过去,设置了ON COMPLETION NOT PRESERVE。事件在创建后立即被删除。

    どのような理由であれ,それ自体が無効な创建事件ステトメントはエラで失敗します。

    現在の日付と時間を指定するには,CURRENT_TIMESTAMPを使用できます。このような場合,ベントは,作成されるとすぐに機能します。

    現在の日付と時間を基準にした将来のある時点(今から3週間後というフレズで表される時点など)に発生する,オプションの句+时间间隔时间间隔を使用できます。时间间隔部分は,数量と時間単位の2の部分で構成され,DATE_ADD ()関数で使用される間隔を管理するのと同じ構文ルルに従います(セクション12.7 "日付および時間関数"を参照してください)。また,単位のキーワードも、イベントを定義する場合はマイクロ秒を含む単位を使用できない点を除いて同じです。一部の間隔型では、複合の時間単位を使用できます。たとえば、2分と10秒は,+ interval '2:10' minute_secondとして表すことができます。

    また,間隔を組み合わせることもできます。たとえば,在当前时间戳+间隔3周+间隔2天は,今から3週間と2日後と同等です。このような句の各部分は,+时间间隔で始まる必要があります。

  • アクションを定期的に繰り返すには,每一个句を使用します。每一个キワドのあとに,前のキワドの説明に示されている时间间隔を指定します。(每一个では+时间间隔は使用されません)たとえば,每6周6週間ごとを示します。

    每一个句では+时间间隔句は許可されていませんが,+时间间隔内で許可されているのと同じ複合の時間単位を使用できます。

    每一个句には,オプションの开始句を含めることができます。开始のあとに,このアクションがい繰り返しを開始するかを示す时间戳値を指定します。また,+时间间隔时间间隔を使用して,今からの時間を指定することもできます。たとえば,每3个月开始current_timestamp + interval 1周は,今から1週間後に開始して3か月ごとを示します。同様に,今から6時間と15分後から開始して2週ごとを,每2周开始一次current_timestamp + interval '6:15' hour_minuteとして表すことができます。开始を指定しないことは,开始CURRENT_TIMESTAMPを使用することと同じです。つまり,イベントに対して指定されたアクションは,そのイベントが作成されるとただちに繰り返しを開始します。

    每一个句には,オプションの结束句を含めることができます。结束キワドのあとに,このMySQLに指示する时间戳値を指定します。また,结束とともに+时间间隔时间间隔を使用することもできます。たとえば,每12小时开始current_timestamp + interval 30分钟结束current_timestamp + interval 4周は,今から30分後に開始し,今から4週間後に終了するまで12時間ごとと同等です。结束を使用しないことは,この。

    结束は,複合の時間単位に対して开始と同じ構文をサポトします。

    每一个句では,开始または结束,あるいはその両方を使用できます。また,どちらも使用しないことも可能です。

    繰り返しイベントがスケジュール間隔内に終了しない場合は,イベントの複数のインスタンスが同時に実行される可能性があります。これが好ましくない場合は、同時以及ンスタンスを回避するためのメカニズムを設けてください。たとえば,GET_LOCK ()関数や,行またはテブルのロックを使用できます。

按计划句では,組み込みのMySQL関数やユ,ザ,変数を含む式を使用して,そこに含まれているすべての时间戳または时间间隔値を取得できます。このような式でストアドファンクションやユーザー定義関数を使用したり,テーブル参照を使用したりすることはできません。ただし,选择双は使用できます。これは,创建事件ステトメントと改变事件ステトメントの両方に当てはまります。このような場合のストアドファンクション,ユーザー定義関数,およびテーブルへの参照は明確に禁止されており,エラーで失敗します(错误# 22830を参照してください)。

按计划句の時間は,現在のセッションのtime_zone値を使用して解釈されます。これがイベントのタイムゾーン,つまり,イベントのスケジューリングに使用され,イベントが実行されるとそのイベント内で有効になるタイムゾーンになります。これらの時間はutcに変換され,ereplicationベントのタereplicationムゾンとともにmysql.eventテブル内に格納されます。これにより,サーバータイムゾーンまたはサマータイムの影響に対し生じた変更とは無関係に,定義されたとおりにイベントの実行を処理できます。ベントの時間の表現の詳細は,セクション20.4.4 "ベントメタデベントメタデタ"を参照してください。セクション13.7.5.19 " show events構文"およびセクション21.7 " information_schema eventsテブル"も参照してください。

。この動作は,完成后保存を指定することによってオバラドできます。完成后不保留を使用すると,単にデフォルトの非持続性の動作が明示的になるだけです。

禁用キワドを使用すると,,。あるいは,启用を使用して,デフォルトステタス(アクティブ)を明示的にすることもできます。これは,改变事件と組み合わせるともっとも有効です(セクション13.1.2 " alter event構文"を参照してください)。

启用禁用の代わりに3番目の値を使用することもできます。禁用在奴隶は,イベントがマスター上で作成されてスレーブにレプリケートされたが,まだスレーブ上で実行されていないことを示すために,レプリケーションスレーブ上のイベントのステータスに対して設定されます。セクション17.4.1.11 "呼び出される機能のレプリケション"を参照してください。

评论句を使用して,ベントに対するコメントを指定できます。评论には,ベントの説明に使用する,最大64文字の任意の文字列を指定できます。コメントテキストは文字列リテラルであるため,引用符で囲む必要があります。

句は,イベントによって実行されるアクションを指定するものであり,SQLステートメントで構成されます。ストアドルーチンで使用できる有効なMySQLステートメントのほぼすべてを,スケジュールされたイベントのアクションステートメントとしても使用できます。(セクションd.1 "ストアドプログラムの制約"を参照してください.)たとえば,次の电子书ベントe_hourlyは,会话テブルのすべての行を1時間に1回削除します。ここで,このテブルはsite_activityスキマの一部です。

注释:每小时清空会话表。删除activity.sessions

MySQLは,MySQLベントが作成または変更されたときの有効なsql_modeシステム変数の設定を格納し,econベントが実行を開始したときの現在のサSQLモ,常にその常にその。

句に改变事件ステトメントを含む创建事件ステトメントは成功したように見えます。ただし,結果として得られるスケジュールされたイベントをサーバーが実行しようとすると、その実行はエラーで失敗します。

注記

単に結果セットを返す选择显示などのステトメントは,ベントで使用されても何の効果もありません。これらのステトメントからの出力はMySQLモニタに送信されず,またどこにも格納されません。ただし,結果を格納する选择……成插入……选择などのステートメントは使用できます。(後者の例については,このセクションにある次の例を参照してください)。

ベントが属するスキマは,句でのテブル参照のためのデフォルトスキマです。ほかのスキマでのテブルへの参照はすべて,正しいスキマ名で修飾する必要があります。

次に示すように,ストアドル,チンと同様に,开始および结束キワドを使用して句で複合ステトメントの構文を使用できます。

分隔符| CREATE EVENT e_daily ON SCHEDULE每1天注释“保存会话总数,然后每天清空表”DO BEGIN INSERT INTO site_activity。查询当前时间戳,COUNT(*) FROM site_activity.sessions;从site_activity.sessions删除;结束|分隔符;

この例では,分隔符コマンドを使用して,ステトメント区切り文字を変更します。セクション20.1 "ストアドプログラムの定義"を参照してください。

e .ベントでは,ストアドルチンで使用されているような,より複雑な複合ステトメントを使用できます。この例では,ロカル変数,エラハンドラ,およびフロ制御構造構文を使用しています。

分隔符|每5秒创建一个事件。声明sqlexception的continue处理程序;SET v = 0;当v < 5 DO INSERT INTO t1 VALUES (0);SET s1 = s1 + 1;SET v = v + 1;结束时;结束|分隔符;

イベントに,またはイベントから直接パラメータを渡す方法はありませんが,パラメータを持つストアドルーチンをイベント内で呼び出すことは可能です。

调用myproc(5,27);

ベントの定義者に超级権限がある場合、その。この権限を付与すると悪用される可能性があるため,これを行う場合は十分に注意する必要があります。

一般に,ストアドルーチンで有効なすべてのステートメントを,イベントによって実行されるアクションステートメントに使用できます。ストアドルチン内で許可されるステトメントの詳細は,セクション20.2.1 "ストアドルチンの構文"を参照してください。ストアドルーチンの一部としてイベントを作成できますが,イベントを別のイベントで作成することはできません。