MySQLデータベースの詳細(8)——イベント


MySQLデータベースの詳細(8)——イベント
一、事件の概要
1、事件の概要
イベントは、タイミングタスクを実行するために使用されるSQLセットのセットで、時間が経過するとトリガーされます.1つのイベントは、特定のイベントスケジューラスレッドによって管理される1回呼び出すことも、周期的に起動することもできます.イベントは、オペレーティングシステムの計画タスクのみで実行できる作業に取って代わり、MySQLのイベントスケジューラは、LinuxのCRONやWindowsのタスク計画など、オペレーティングシステムの計画タスクは毎分1回しか実行できません.
2、事件の長所
A、データのタイミング操作は外部プログラムに依存せず、直接データベース自身が提供する機能を使用する.B、1秒ごとに1つのタスクを実行することができ、リアルタイム性に対する要求が高い環境で非常に実用的である.
3、事件の欠点
タイミングトリガ、呼び出し不可.
4、イベントの適用シーン
テーブルの作成、データの削除など、一定の要件が一定に設定されている操作はeventを使用して処理できます.
二、イベントの操作
1、イベントの作成
CREATE
[DEFINER = { user | CURRENT_USER }]
EVENT [IF NOT EXISTS] event_name
ON SCHEDULE schedule
[ON COMPLETION [NOT] PRESERVE]
[ENABLE | DISABLE | DISABLE ON SLAVE]
[COMMENT 'comment']
DO event_body;

event_name:イベント名、64文字を超えることはできません.名前は現在のDateabaseで一意でなければなりません.同じデータベースに同じ名前のeventはありません.イベントの作成時に、schemaを同時に指定できます.構文はschema_です.name.eventname.eventを使用する一般的な作業は、テーブルの作成、データの挿入、データの削除、テーブルの空化、テーブルの削除です.イベント名を指定するには、イベント名にイベント全体を記述する能力が必要です.推奨命名規則は以下の通りである:動作名(INTO/FROM_)テーブル名_TIME、例えば毎日テーブルに挿入してイベントの名前を記録し、insert_into_tablename_day.ON SCHEDULE schedule:計画タスクschedule:スケジュール規則、イベントの実行時間と実行規則を規定する.イベントの実行時間と頻度(時間は将来の時間でなければならず、過去の時間はエラーになる)を決定し、ATとEVERYの2つの形式があります.構文は、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_SECOND|MINUTE|HOUR_SECOND|MINUTE_SECOND}AT timestampは、単一の計画タスクを完了するために使用されます.EVERY n quantity[STARTS timestamp][ENDS timestamp]は、重複した計画タスクを完了するために使用されます.タイムスタンプは任意のTIMESTAMPおよびDATETIMEデータ型であり、タイムスタンプは現在の時間よりも大きい必要がある.重複する計画タスクでは、時間(単位)の数は任意の非空(Not Null)の整数式であり、時間単位はキーワード:YEAR、MONTH、DAY、HOUR、MINUTEまたはSECONDである.AT timestampは一般的に1回のみ実行するために使用され、一般的には現在の時間に遅延した時間を加えることができます.例えば、AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR;例えば、AT'2006-02-1023:59:00'などの時間定数を定義することもできる.EVERY intervalは一般に周期的な実行に用いられ、開始時間と終了時間を設定することができる.ON COMPLETION[NOT]PRESERVE:イベントが期限切れになった後の操作は、デフォルトのイベントが期限切れになった後に自動的に削除されます.イベントを保留したい場合はON COMPLETION PRESERVEを使用します.イベントを保持したくない場合は、ON COMPLETION NOT PRESERVEを設定できます.[ENABLE|DISABLE]:パラメータEnableとDisableは設定イベントの状態を表します.Enablelはシステムがイベントを実行することを示し、Disableはシステムがイベントを実行しないことを示す.[COMMENT'comment']:コメントを追加すると、コメントがメタデータに表示され、information_に格納されます.schemaテーブルのCOMMENT列は、最大64バイトです.'comment'は、コメントの内容を単一引用符の間に置くことを示し、より包括的な情報を表現するためにコメントを使用することを推奨します.event_body:イベントボディ、単行SQL構文、またはBEGIN......END文ブロック、またはストレージ・プロシージャです.
2、イベントスケジューラのオープン
MySQLはイベントスケジューラをデフォルトで閉じます.イベントスケジューラ情報の表示
show global variables like '%event_scheduler%';
SHOW PROCESSLIST;

イベントスケジューラset global event_scheduler=ON;をMySQLのmyで開きます.cnfプロファイルで変更します.event_scheduler = 1 # ON  
3、イベントの表示
 SELECT * FROM mysql.event;
    SHOW EVENTS;
    SELECT * FROM information_schema.events;

4、イベントの削除DROP EVENT [IF EXISTS] eventname;
5、無効なイベントALTER EVENT eventname DSIABLE;
6、イベントを開くALTER EVENT eventname ENABLE;
7、イベントの修正
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 'comment']
    [DO event_body]

三、イベントの実例
1、一定時間ごとに記録を挿入する
テーブルCREATE TABLE event_table(timeline TIMESTAMP);を作成イベントを作成し、1秒ごとにレコードを挿入します.
CREATE EVENT insert_into_event_table_second
ON SCHEDULE EVERY 1 SECOND 
DO INSERT INTO schoolDB.event_table VALUES(CURRENT_TIMESTAMP);

一定時間経過した挿入レコードselect * from event_table;の表示停止イベントalter event insert_into_event_table_second disable;削除イベントdrop event insert_into_event_table_second;2、特定の時間に記録を挿入する
特定の時間にレコードを挿入するイベントを作成します.
CREATE EVENT insert_into_event_table_time
ON SCHEDULE AT TIMESTAMP '2018-04-11 21:27:30'
DO INSERT INTO schoolDB.event_table values(CURRENT_TIMESTAMP);

特定時間後に挿入レコードを表示し、挿入レコードselect * from event_table;3、特定の時間に表を空にする
イベントを作成し、特定の時間にテーブルを空にし、イベントが実行された後にイベントを保持します.
CREATE EVENT truncate_event_table_time
ON SCHEDULE AT TIMESTAMP '2018-04-11 21:35:00'
ON COMPLETION PRESERVE
DO TRUNCATE TABLE schoolDB.event_table;

時間経過後にテーブルの内容を問い合わせると、select * from event_table;が空になりました.
4、あるイベントセグメント内のタイミングクリアテーブル
イベントを作成し、5日後にオープンし、毎日定時にテーブルを空にし、1ヶ月後に実行を停止します.
CREATE EVENT truncate_event_table_day
ON SCHEDULE EVERY 1 DAY 
STARTS CURRENT_TIMESTAMP + INTERVAL 5 DAY
ENDS CURRENT_TIMESTAMP + INTERVAL 1 MONTH
ON COMPLETION PRESERVE
DO TRUNCATE TABLE schoolDB.event_table;