创建[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識別子である必要があります。ベント名は大文字と小文字が区別されないため,myevent
とMyEvent
という名前の2の。一般に,ベント名を管理するルルは,ストアドルチンの名前の場合と同じです。セクション9.2 "スキマオブジェクト名"を参照してください。
帐号ベントはスキ帐号マに関連付けられています。event_name
の一部としてスキマが示されていない場合は,デフォルトの(現在の)スキマと見なされます。ベントを特定のスキマ内に作成するには,
構文を使用して、その。schema_name
.event_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 "ストアドルチンの構文"を参照してください。ストアドルーチンの一部としてイベントを作成できますが,イベントを別のイベントで作成することはできません。