91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么理解MySQL的EVENT事件

發布時間:2021-11-08 11:21:48 來源:億速云 閱讀:245 作者:iii 欄目:MySQL數據庫

這篇文章主要介紹“怎么理解MySQL的EVENT事件”,在日常操作中,相信很多人在怎么理解MySQL的EVENT事件問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么理解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 權限。

到此,關于“怎么理解MySQL的EVENT事件”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

永丰县| 泊头市| 淳化县| 文水县| 荔浦县| 五莲县| 揭阳市| 稷山县| 饶河县| 县级市| 青冈县| 红河县| 黔西| 德钦县| 绥中县| 通江县| 西丰县| 浮梁县| 肇东市| 平南县| 丹江口市| 库尔勒市| 友谊县| 玛曲县| 甘洛县| 平舆县| 夏邑县| 高安市| 收藏| 志丹县| 林州市| 开原市| 普定县| 哈尔滨市| 新宾| 汝城县| 藁城市| 惠东县| 山阳县| 姚安县| 光泽县|