mysql--mysqlのeventの使い方の詳細

6205 ワード

一、基本概念mysql 5.1バージョンからeventコンセプトが導入されました.eventは「時間トリガ」であり、triggersのイベントトリガとは異なり、eventはlinux crontab計画タスクと同様に、時間トリガに使用されます.ストレージ・プロシージャの使用を個別に呼び出すか、特定の時点で関連するSQL文またはストレージ・プロシージャをトリガーします.
二、適用範囲は、テーブルの作成、データの削除など、一定の時間ごとに必要な操作に対してeventを使用して処理することができる.たとえば、eventを使用して、来月使用する3つのテーブルを毎月1日午前1時に自動的に作成します.
三、権限を使用して単独でeventを使用してSQL文を呼び出す場合、ユーザーがevent権限を持つ必要があることを表示して作成し、そのSQL文を呼び出す場合、ユーザーがそのSQLを実行する権限を持つ必要がある.Event権限の設定はmysqlに保存されます.userテーブルとmysql.dbテーブルのEvent_privフィールドです.eventとprocedureが連携して使用される場合、ストレージ・プロシージャの表示と作成にはcreate routine権限が必要であり、ストレージ・プロシージャの実行を呼び出すにはexcute権限が必要であり、ストレージ・プロシージャが特定のSQL文を呼び出すには、そのSQLを実行する権限が必要である.EVENTコマンドの表示には、(1)mysql.eventテーブルの問合せ、(2)SHOW EVENTSコマンドの問合せ、(3)SHOW FULL EVENTSコマンドの問合せ、(4)information_schema.eventsテーブルの問合せ(5)SHOW CREATE EVENTがあります.つまり、eventの使用頻度が低い場合はrootユーザーによる作成とメンテナンスを推奨します.
四、基本文法
4.1タイマーをオンにするeventを有効にするには、MySQLの定数GLOBAL event_schedulerはonまたは1でなければなりません.--タイマーをオンにするかどうかを確認
 
  
SHOW VARIABLES LIKE 'event_scheduler';

--タイマー0:off 1:onをオンにします
 
  
SET GLOBAL event_scheduler = 1;

イベント計画を0またはOFFに設定すると、イベント計画プロセスを閉じると、新しいイベント実行はありませんが、既存の実行中のイベントが完了します.私たちのオンライン環境ではeventを使用する場合、メインライブラリでタイマをオンにし、ライブラリからタイマをオフにすることに注意してください.eventはすべての操作をトリガーしてbinlogを記録してプライマリ同期を行います.ライブラリからタイマーをオンにすると、カードライブラリが発生する可能性があります.マスターライブラリを切り替えたら、新しいマスターライブラリのタイマをオンにしてください.特に注意してください.
4.2イベントCREATE EVENTを作成する構文は、CREATE EVENT[IF NOT EXISTS]---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------name-----------------------------------------------------------*表記2 ON SCHEDULE schedule----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------statement------------------------------------------*7注記1:[IF NOT EXISTS]IF NOT EXISTSを使用し、同名eventが存在しない場合のみ作成します.そうでない場合は無視します.eventの作成が成功することを保証するために使用しないことをお勧めします.寸法2:event_name名の最大長は64バイトです.名前は現在のDateabaseで一意でなければなりません.同じデータベースに同じ名前のeventはありません.eventを使用する一般的な作業は、テーブルの作成、データの挿入、データの削除、テーブルの空化、テーブルの削除です.ネーミング仕様による不便を避けるためには、イベント名にイベント全体を記述する能力を持たせることが望ましい.推奨命名規則は次のとおりです:アクション名_(INTO/FROM_)テーブル名_TIME、例:1.毎月作成(クリア/削除)ファンテーブル:create(truncate/drop)table_fans_month; 2.毎日ファンリストからデータを挿入(削除):insert(delete)into(from)_fans_day; 注記3:ON SCHEDULE ON SCHEDULE計画タスクは、計画タスクを設定する方法が2つあります:1.ATタイムスタンプは、単一の計画タスクを完了するために使用されます.2.EVERY時間(単位)の数量時間単位[STARTSタイムスタンプ][ENDSタイムスタンプ]は、重複する計画タスクを完了するために使用されます.2つの計画タスクのうち、タイムスタンプは任意のTIMESTAMPとDATETIMEデータ型であってもよく、タイムスタンプは現在の時間よりも大きい必要があります.重複する計画タスクの中で、時間(単位)の数量は任意の非空であってもよい(Not Null)の整数式で、時間単位はキーワード:YEAR,MONTH,DAY,HOUR,MINUTEまたはSECONDである.ヒント:その他の時間単位も合法的である.例えば、QUARTER,WEEK,YEAR_MONTH,DAY_HOUR,DAY_MINUTE,DAY_SECOND,HOUR_MINUTE,HOUR_SECOND,MINUTE_SECONDは、これらの非標準的な時間単位の使用を推奨しない.表記4:[ON COMPLETION[NOT]PRESERVE]ON COMPLETIONパラメータは、「このイベントが二度と発生しない場合」を表します.つまり、単一の計画タスクの実行が完了した場合、または重複する計画タスクがENDSフェーズに実行された場合です.PRESERVEの役割は、イベントが実行された後にDropされないようにすることです.このパラメータを使用して、EVENTの具体的な情報を表示することをお勧めします.注記5:[ENABLE|DISABLE]パラメータEnableとDisableは、設定イベントの状態を表します.Enablelは、システムがこのイベントを実行することを示します.Disableは、システムがイベントを実行しないことを示します.イベントを閉じるまたは開くには、次のコマンドを使用します:ALTER EVENT event_name ENABLE/DISABLE注釈6:[COMMENT'comment']注釈がメタデータに表示され、information_に格納されます.schemaテーブルのCOMMENT列は、最大64バイトです.'comment'は、コメントの内容を単一引用符の間に置くことを示し、より包括的な情報を表現するためにコメントを使用することを推奨します.注記7:DO sql_statement   DO sql_statementフィールドは、eventが実行するSQL文またはストレージ・プロシージャを表します.ここのSQL文は複合文であってもよい.例えば、BEGIN CREATE TABLE test 1;テーブルの作成(テストが必要)DROP TABLE test 2;//テーブルCALL proc_test 1()//削除呼び出しストアド・プロシージャENDは、BEGIN識別子とEND識別子を使用して複合SQL文を実行順に配置します.もちろんSQL文には制限がありますが、その制限は関数FunctionとトリガTriggerのSQL文に対する制限と同じです.関数FunctionとトリガTriggerで一部のSQLを使用できない場合は、EVENTでも使用できません.明確に言えば、LOCK TABLES UNLOCK TABLES CREATE EVENT ALTER EVENT LOAD DATA
4.3実行ロジックFor(イベントeach event that has been created)If(イベントの状態がDISABLEではない)And(現在の時間がENDS時間より前)And(現在の時間がSTARTS時間より後)And(前回の実行後の時間)And(実行されていない)Then:新しいスレッドを作成してイベントを伝達するSQL文を新しいスレッドに渡す4.4修正イベントALTER EVENTを使用してイベントを修正します.具体的なALTER構文は、イベントを作成する構文と似ています.ALTER EVENT event_name ON SCHEDULE schedule [RENAME TO new_event_name] [ON COMPLETION [NOT] PRESERVE] [ENABLE | DISABLE] [COMMENT 'comment'] DO sql_statement 4.5削除イベントEVENT DROP EVENT文を使用して作成したイベントを削除します.構文は以下の通りです.DROP EVENT[IF EXISTS]event_nameただし、イベントが実行中の場合、イベントを削除してもイベントが停止せず、イベントが完了するまで実行されます.DROP USER文とDROP DATABASE文を使用すると、含まれるイベントが同時に削除されます.五、常用インスタンスは一秒ごとに自動的にe_を呼び出すtest()ストレージプロセス
 
  
CREATE EVENT IF NOT EXISTS e_test
ON SCHEDULE EVERY 1 SECOND
ON COMPLETION PRESERVE
DO CALL e_test();

毎月の1日午前1時にSTAT()ストレージプロセスを実行します.
 
  
CREATE  EVENT  NOT EXISTS  STAT
ON  SCHEDULE  EVERY  1  MONTH  STARTS DATE_ADD(DATE_ADD(DATE_SUB(CURDATE(),INTERVAL DAY(CURDATE())-1 DAY), INTERVAL 1 MONTH),INTERVAL 1 HOUR)
ON  COMPLETION  PRESERVE  ENABLE
DO
BEGIN
CALL STAT();
END