MySQL入門--EVENT(事件)
MySQL EVENT (事件)
MySQL 事件是按排程表執行的任務。這些事件可稱為“排程事件”。建立事件時,會將其建立為命名資料庫物件,其中包含在特定時間執行或定期重複發生的 SQL 語句(或儲存過程)。這在概念上與 Linux/UNIX crontab (也稱為“ cron 作業”)或 Windows 任務排程程式的理念類似。語法與相關語句如下:
CREATE EVENT event_name ON SCHEDULE schedule DO sql_statement
事件語句:
– SET GLOBAL event_scheduler = {ON | OFF}
– CREATE EVENT
– ALTER EVENT
– DROP EVENT
event_name :事件是模式物件,與表、儲存過程和觸發器一樣。 event_name 必須是有效的識別符號,且可以按正常方式透過模式名稱進行引用和 / 或限定。事件名稱在模式中必須是唯一的。
schedule :排程表是一種規則,用於指定 MySQL 執行與事件相關聯的操作的時間。
sql_statement :您必須包含按排程表執行的有效 SQL 語句或儲存過程語句。此語句受到的限制與適用於儲存函式和動態 SQL 的限制相同。例如,該語句無法返回結果集(如 SELECT 或 SHOW 所生成的結果集)。通常會使用 CALL 語句呼叫過程來執行實際操作。
1.1. 排程表
排程表是指定應在何時執行操作的規則。可以在 CREATE EVENT 和 ALTER EVENT 語句的 SCHEDULE 子句中指定排程表。
有兩種型別的排程表:執行一次的排程表(使用 AT 關鍵字)和可重複執行的排程表(使用 EVERY 關鍵字)。對於後者,必須定義事件的重複頻率。還可以定義一個時間段,以確定應重複執行事件的期限。
SCHEDULE 子句的語法如下所示:
AT timestamp [+ INTERVAL interval]| EVERY interval [STARTS timestamp [+ INTERVAL interval]] [ENDS timestamp [+ INTERVAL interval]]
SCHEDULE 子句可包含以下變數元素:
Ø timestamp : DATETIME 或 TIMESTAMP 型別的表示式;
Ø interval :用於指定持續時間。持續時間的表示方法為,指定一個整數數量,後跟用於定義特定種類持續時間的關鍵字。有效的關鍵字包括:
- YEAR
- QUARTER
- MONTH
- DAY
- HOUR
- MINUTE
- WEEK
- SECOND
- YEAR_MONTH
- DAY_HOUR
- DAY_MINUTE
- DAY_SECOND
- HOUR_MINUTE
- HOUR_SECOND
- MINUTE_SECOND
事件排程程式是 mysqld 程式中的一個單獨執行緒,負責執行排程事件。排程程式會檢查是否應執行事件;如果應執行事件,則會建立新的連線來執行操作。
使用事件來自動地定期執行(維護)任務,如更新彙總表或重新整理查詢中的表(物化檢視 模擬),或者執行夜間作業。例如,處理白天的工作、載入資料倉儲或者將資料匯出到 檔案中。
1.2. 事件排程程式和許可權
1) 事件排程程式
建立事件後,該事件將儲存在資料庫中,以便按排程表執行。 event_scheduler 執行緒會監控所有事件的排程表,在到達排程表中的時間時,該執行緒會啟動一個新的執行緒來執行每個事件。
預設情況下, event_scheduler 執行緒設定為 OFF 。您必須顯式啟用該執行緒,方法為修改全域性 event_scheduler 伺服器變數的值,將其設定為 ON 。還可以透過將伺服器變數新增到選項檔案中(以便更改在啟動時生效)或動態使用 SET 語法來實現。如果在 event_scheduler 設定為 DISABLED 的情況下啟動伺服器,則無法在 MySQL 正在執行時透過 SET 語句將其啟用。而必須停止 MySQL 並在啟用該選項的情況下重新啟動 MySQL 。
啟用 event_scheduler 執行緒後,您可以在 SHOW PROCESSLIST 的輸出(以及 INFORMATION_SCHEMA 等效項 PROCESSLIST )中看到該執行緒。
可以使用 ALTER EVENT 語法更改 EVENT 。可以透過該語法更改 EVENT 的每個元素。因此, ALTER EVENT 的語法模型幾乎與 CREATE EVENT 語句的語法模型完全相同。
2) 事件排程許可權
必須擁有 SUPER 許可權才能設定全域性 event_scheduler 變數。必須擁有 EVENT 許可權才能建立、修改或刪除事件。
Ø 使用 GRANT 分配許可權(僅限在模式級別)
mysql> GRANT EVENT ON myschema.* TO user1@srv1;
mysql> GRANT EVENT ON *.* TO user1@srv1;
Ø 使用 REVOKE 取消事件許可權
REVOKE EVENT ON myschema.* FROM user1@srv1;
要取消 EVENT 許可權,請使用 REVOKE 語句。撤消使用者帳戶的 EVENT 許可權不會刪除或禁用該帳戶已建立的任何事件。
使用者的 EVENT 許可權儲存在 mysql.user 和 mysql.db 表的 Event_priv 列中。在這兩種情況下,該列均儲存值“ Y ”或“ N ”之一。“ N ”是預設值。僅當給定使用者擁有全域性 EVENT 許可權時,該使用者的 mysql.user.Event_priv 值才會設為“ Y ”。對於模式級別的 EVENT 許可權, GRANT 會在 mysql.db 中建立一個行,並按如下所示設定該行的列值:
l Db :模式的名稱
l User :使用者的名稱
l Event_priv :“ Y ”
您不必直接操作這些表,因為 GRANT EVENT 和 REVOKE EVENT 語句會對其執行所需的操作。
1.3. 事件執行許可權
事件使用事件定義者的許可權進行執行。如果定義者無權執行某任務,則事件無法執行該任務。示例如下:
user1@srv1 只能為 myschema 建立 SELECT 事件:
CREATE EVENT e_store_ts ON SCHEDULE EVERY 10 SECOND
DO
INSERT INTO myschema.mytable VALUES (UNIX_TIMESTAMP());
由於缺少 INSERT 許可權,該事件不會在表中建立任何行。事件使用其定義者的許可權進行執行,並且無法執行定義者無權執行的任何操作,瞭解這一點非常重要。例如,假設 user1@srv1 擁有對 myschema 的 EVENT 許可權。再假設該使用者擁有對 myschema 的 SELECT 許可權,但是沒有針對此模式的其他許可權。儘管 user1@srv1 可以建立新事件,但該事件本身無法執行 INSERT 操作,因為定義者 user1@srv1 無權執行該操作。
錯誤日誌
如果檢視 MySQL 錯誤日誌 (hostname.err) 可以看到事件正在執行,但是該事件嘗試執行的操作失敗(由 RetCode=0 指明):
...
060209 22:39:44 [Note] EVEX EXECUTING event newdb.e [EXPR:10]
060209 22:39:44 [Note] EVEX EXECUTED event newdb.e [EXPR:10]. RetCode=0
060209 22:39:54 [Note] EVEX EXECUTING event newdb.e [EXPR:10]
060209 22:39:54 [Note] EVEX EXECUTED event newdb.e [EXPR:10]. RetCode=0
060209 22:40:04 [Note] EVEX EXECUTING event newdb.e [EXPR:10]
060209 22:40:04 [Note] EVEX EXECUTED event newdb.e [EXPR:10]. RetCode=0
...
1.4. 檢查事件
SHOW CREATE EVENT event_name 此語句顯示重新建立給定事件所需的 CREATE EVENT 語句。必須提供事件名稱才能檢視該事件的相關資訊。
SHOW EVENTS 此語句為 MySQL 擴充套件。它可返回事件的特徵,如資料庫、名稱、型別、建立者以及建立和修改日期。此語句有一個優點:可基於 LIKE 模式或 WHERE 子句中提供的條件來顯示特定事件。如果未提供此類條件,則 SHOW EVENTS 語句會顯示所有事件的相關資訊。
INFORMATION_SCHEMA.EVENTS
EVENT_CATALOG: NULL
EVENT_SCHEMA: myschema
EVENT_NAME: e_store_ts
DEFINER: user1@srv1
EVENT_BODY: SQL
EVENT_DEFINITION: INSERT INTO myschema.mytable VALUES
(UNIX_TIMESTAMP())
...
1.5. 刪除事件
使用如下語法可顯式刪除事件:
DROP EVENT [IF EXISTS] [schema_name.]event_name;
使用 IF EXISTS 可防止因嘗試刪除不存在的事件而出現的錯誤。您必須對包含要刪除的事件的資料庫擁有 EVENT 許可權。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16976507/viewspace-2646580/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- mysql 事件 eventMySql事件
- MySQL中的事件排程器EVENTMySql事件
- MySQL的事件溯源Event Sourcing表結構MySql事件
- Tkinter (44) 事件 Event事件
- JS中event事件JS事件
- Laravel使用event事件Laravel事件
- 入門入門入門 MySQL命名行MySql
- Spring Boot 之事件(Event)Spring Boot事件
- 事件迴圈(event loop)事件OOP
- js中事件物件eventJS事件物件
- MySQL使用event等待事件進行資料庫效能診斷MySql事件資料庫
- MySQL入門MySql
- MySQL入門--MySQL安全MySql
- MySQL入門--mysql命令MySql
- MySQL ROUTINE & EVENTMySql
- JavaScript基礎之事件eventJavaScript事件
- JS 事件機制 Event LoopJS事件OOP
- JavaScript事件迴圈(Event Loop)JavaScript事件OOP
- Javascript 事件迴圈event loopJavaScript事件OOP
- JS事件迴圈Event LoopJS事件OOP
- JS 事件迴圈(Event Loop)JS事件OOP
- 瞭解下C# 事件(Event)C#事件
- freeswitch的event事件處理事件
- MySQL入門系列:MySQL概述MySql
- Mysql入門【Mysql約束】MySql
- SQL快速入門 ( MySQL快速入門, MySQL參考, MySQL快速回顧 )MySql
- MySQL 入門指南MySql
- Mysql入門【JDBC】MySqlJDBC
- 如何入門 MySQLMySql
- MySQL 快速入門MySql
- mySql入門-(二)MySql
- MySQL入門——排序MySql排序
- Mysql - 使用入門MySql
- MYSQL 入門全套MySql
- Omi 入坑指南 Third field 事件入門事件
- 詳解 MySQL 用事件排程器 Event Scheduler 建立定時任務MySql事件
- 詳解MySQL用事件排程器Event Scheduler建立定時任務MySql事件
- JavaScript入門⑧-事件總結大全JavaScript事件