欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

mysql中event的用法詳解

 更新時(shí)間:2013年06月11日 16:47:09   作者:  
本篇文章是對(duì)mysql中event的用法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下

一、基本概念
mysql5.1版本開(kāi)始引進(jìn)event概念。event既“時(shí)間觸發(fā)器”,與triggers的事件觸發(fā)不同,event類(lèi)似與linux crontab計(jì)劃任務(wù),用于時(shí)間觸發(fā)。通過(guò)單獨(dú)或調(diào)用存儲(chǔ)過(guò)程使用,在某一特定的時(shí)間點(diǎn),觸發(fā)相關(guān)的SQL語(yǔ)句或存儲(chǔ)過(guò)程。

二、適用范圍
對(duì)于每隔一段時(shí)間就有固定需求的操作,如創(chuàng)建表,刪除數(shù)據(jù)等操作,可以使用event來(lái)處理。

例如:使用event在每月的1日凌晨1點(diǎn)自動(dòng)創(chuàng)建下個(gè)月需要使用的三張表。

三、使用權(quán)限
單獨(dú)使用event調(diào)用SQL語(yǔ)句時(shí),查看和創(chuàng)建需要用戶(hù)具有event權(quán)限,調(diào)用該SQL語(yǔ)句時(shí),需要用戶(hù)具有執(zhí)行該SQL的權(quán)限。Event權(quán)限的設(shè)置保存在mysql.user表和mysql.db表的Event_priv字段中。

當(dāng)event和procedure配合使用的時(shí)候,查看和創(chuàng)建存儲(chǔ)過(guò)程需要用戶(hù)具有create routine權(quán)限,調(diào)用存儲(chǔ)過(guò)程執(zhí)行時(shí)需要使用excute權(quán)限,存儲(chǔ)過(guò)程調(diào)用具體的SQL語(yǔ)句時(shí),需要用戶(hù)具有執(zhí)行該SQL的權(quán)限。
查看EVENT命令有如下幾種:
 
(1)查詢(xún)mysql.event表;

(2)通過(guò)SHOW EVENTS命令;

(3)通過(guò)SHOW FULL EVENTS命令;

(4)通過(guò)查詢(xún)information_schema.events表

(5)SHOW CREATE EVENT。
 
總之,event的使用頻率較低建議使用root用戶(hù)進(jìn)行創(chuàng)建和維護(hù)。

四、基本語(yǔ)法

4.1 開(kāi)啟定時(shí)器
要使event起作用,MySQL的常量GLOBAL event_scheduler必須為on或者是1。
-- 查看是否開(kāi)啟定時(shí)器

復(fù)制代碼 代碼如下:

SHOW VARIABLES LIKE 'event_scheduler';

-- 開(kāi)啟定時(shí)器 0:off 1:on
復(fù)制代碼 代碼如下:

SET GLOBAL event_scheduler = 1;

當(dāng)你設(shè)定事件計(jì)劃為0 或OFF,即關(guān)閉事件計(jì)劃進(jìn)程的時(shí)候,不會(huì)有新的事件執(zhí)行,但現(xiàn)有的正在運(yùn)行的事件會(huì)執(zhí)行到完畢

對(duì)于我們線(xiàn)上環(huán)境來(lái)說(shuō),使用event時(shí),注意在主庫(kù)上開(kāi)啟定時(shí)器,從庫(kù)上關(guān)閉定時(shí)器,event觸發(fā)所有操作均會(huì)記錄binlog進(jìn)行主從同步,從庫(kù)上開(kāi)啟定時(shí)器很可能造成卡庫(kù)。切換主庫(kù)后之后記得將新主庫(kù)上的定時(shí)器打開(kāi)。
請(qǐng)?zhí)貏e注意!

4.2 創(chuàng)建事件
CREATE EVENT 的語(yǔ)法如下:
CREATE EVENT
[IF NOT EXISTS] ---------------------------------------------*標(biāo)注1
event_name -----------------------------------------------------*標(biāo)注2

ON SCHEDULE schedule ------------------------------------*標(biāo)注3
[ON COMPLETION [NOT] PRESERVE] -----------------*標(biāo)注4
[ENABLE | DISABLE] ----------------------------------------*標(biāo)注5
[COMMENT 'comment'] --------------------------------------*標(biāo)注6
DO sql_statement -----------------------------------------------*標(biāo)注7

說(shuō)明:
 
標(biāo)注1:[IF NOT EXISTS]
 
使用IF NOT EXISTS,只有在同名event不存在時(shí)才創(chuàng)建,否則忽略。建議不使用以保證event創(chuàng)建成功。

標(biāo)注2:event_name
 
名稱(chēng)最大長(zhǎng)度可以是64個(gè)字節(jié)。名字必須是當(dāng)前Dateabase中唯一的,同一個(gè)數(shù)據(jù)庫(kù)不能有同名的event。

使用event常見(jiàn)的工作是創(chuàng)建表、插入數(shù)據(jù)、刪除數(shù)據(jù)、清空表、刪除表。

為了避免命名規(guī)范帶來(lái)的不便,最好讓事件名稱(chēng)具有描述整個(gè)事件的能力。建議命名規(guī)則如下為:動(dòng)作名稱(chēng)_(INTO/FROM_)表名_TIME,例如:
1.     每月創(chuàng)建(清空/刪除)fans表: 
create(truncate/drop)_table_fans_month;
2.     每天從fans表插入(刪除)數(shù)據(jù):
insert(delete)_into(from)_fans_day;
標(biāo)注3:ON SCHEDULE
 
ON SCHEDULE 計(jì)劃任務(wù),有兩種設(shè)定計(jì)劃任務(wù)的方式:
 
1. AT 時(shí)間戳,用來(lái)完成單次的計(jì)劃任務(wù)。

2. EVERY 時(shí)間(單位)的數(shù)量時(shí)間單位[STARTS 時(shí)間戳] [ENDS時(shí)間戳],用來(lái)完成重復(fù)的計(jì)劃任務(wù)。

在兩種計(jì)劃任務(wù)中,時(shí)間戳可以是任意的TIMESTAMP 和DATETIME 數(shù)據(jù)類(lèi)型,時(shí)間戳需要大于當(dāng)前時(shí)間。

在重復(fù)的計(jì)劃任務(wù)中,時(shí)間(單位)的數(shù)量可以是任意非空(Not Null)的整數(shù)式,時(shí)間單位是關(guān)鍵詞:YEAR,MONTH,DAY,HOUR,MINUTE 或者SECOND。

提示: 其他的時(shí)間單位也是合法的如:QUARTER, WEEK, YEAR_MONTH,DAY_HOUR,DAY_MINUTE,DAY_SECOND,HOUR_MINUTE,HOUR_SECOND, MINUTE_SECOND,不建議使用這些不標(biāo)準(zhǔn)的時(shí)間單位。

標(biāo)注4: [ON COMPLETION [NOT] PRESERVE]
 
ON COMPLETION參數(shù)表示"當(dāng)這個(gè)事件不會(huì)再發(fā)生的時(shí)候",即當(dāng)單次計(jì)劃任務(wù)執(zhí)行完畢后或當(dāng)重復(fù)性的計(jì)劃任務(wù)執(zhí)行到了ENDS階段。而PRESERVE的作用是使事件在執(zhí)行完畢后不會(huì)被Drop掉,建議使用該參數(shù),以便于查看EVENT具體信息。

標(biāo)注5:[ENABLE | DISABLE]
參數(shù)Enable和Disable表示設(shè)定事件的狀態(tài)。Enable表示系統(tǒng)將執(zhí)行這個(gè)事件。Disable表示系統(tǒng)不執(zhí)行該事件。

可以用如下命令關(guān)閉或開(kāi)啟事件:

ALTER EVENT event_name  ENABLE/DISABLE
標(biāo)注6:[COMMENT 'comment']
 
注釋會(huì)出現(xiàn)在元數(shù)據(jù)中,它存儲(chǔ)在information_schema表的COMMENT列,最大長(zhǎng)度為64個(gè)字節(jié)。'comment'表示將注釋內(nèi)容放在單引號(hào)之間,建議使用注釋以表達(dá)更全面的信息。

標(biāo)注 7: DO sql_statement
 
DO sql_statement字段表示該event需要執(zhí)行的SQL語(yǔ)句或存儲(chǔ)過(guò)程。這里的SQL語(yǔ)句可以是復(fù)合語(yǔ)句,例如:
BEGIN
CREATE TABLE test1;//創(chuàng)建表(需要測(cè)試一下)
DROP TABLE test2;//刪除表
CALL proc_test1();//調(diào)用存儲(chǔ)過(guò)程
END

使用BEGIN和END標(biāo)識(shí)符將復(fù)合SQL語(yǔ)句按照?qǐng)?zhí)行順序放在之間。當(dāng)然SQL語(yǔ)句是有限制的,對(duì)它的限制跟函數(shù)Function和觸發(fā)器Trigger 中對(duì)SQL語(yǔ)句的限制是一樣的,如果你在函數(shù)Function 和觸發(fā)器Trigger 中不能使用某些SQL,同樣的在EVENT中也不能使用。明確的來(lái)說(shuō)有下面幾個(gè):

LOCK TABLES
UNLOCK TABLES
CREATE EVENT
ALTER EVENT
LOAD DATA

4.3  執(zhí)行邏輯
For (已建立事件each event that has been created)
If (事件的狀態(tài)非DISABLE)
And (當(dāng)前時(shí)間在ENDS時(shí)間之前)
And (當(dāng)前時(shí)間在STARTS時(shí)間之后)
And (在上次執(zhí)行后經(jīng)過(guò)的時(shí)間)
And (沒(méi)有被執(zhí)行)
Then:
建立一個(gè)新的線(xiàn)程
傳遞事件的SQL語(yǔ)句給新的線(xiàn)程
(該線(xiàn)程在執(zhí)行完畢后會(huì)自動(dòng)關(guān)閉)

4.4 修改事件
使用ALTER EVENT 來(lái)修改事件,具體的ALTER語(yǔ)法如下,與創(chuàng)建事件的語(yǔ)法類(lèi)似:
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語(yǔ)句來(lái)刪除已經(jīng)創(chuàng)建的事件,語(yǔ)法如下:

DROP EVENT
[IF EXISTS]
event_name

 
但當(dāng)一個(gè)事件正在運(yùn)行中時(shí),刪除該事件不會(huì)導(dǎo)致事件停止,事件會(huì)執(zhí)行到完畢為止。使用DROP USER和DROP DATABASE 語(yǔ)句同時(shí)會(huì)將包含其中的事件刪除。

五、常用實(shí)例
每隔一秒自動(dòng)調(diào)用e_test()存儲(chǔ)過(guò)程

復(fù)制代碼 代碼如下:

CREATE EVENT IF NOT EXISTS e_test
ON SCHEDULE EVERY 1 SECOND
ON COMPLETION PRESERVE
DO CALL e_test();

每個(gè)月的一號(hào)凌晨1 點(diǎn)執(zhí)行STAT()存儲(chǔ)過(guò)程:
復(fù)制代碼 代碼如下:

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

相關(guān)文章

  • MYSQL的binary解決mysql數(shù)據(jù)大小寫(xiě)敏感問(wèn)題的方法

    MYSQL的binary解決mysql數(shù)據(jù)大小寫(xiě)敏感問(wèn)題的方法

    BINARY不是函數(shù),是類(lèi)型轉(zhuǎn)換運(yùn)算符,它用來(lái)強(qiáng)制它后面的字符串為一個(gè)二進(jìn)制字符串,可以理解為在字符串比較的時(shí)候區(qū)分大小寫(xiě)
    2013-09-09
  • 解決MySQL登錄報(bào)錯(cuò)1130:1130?Host?***.***.***.***?is?not?allowed?to?connect?to?this?MySQL?server

    解決MySQL登錄報(bào)錯(cuò)1130:1130?Host?***.***.***.***?is?not?allowe

    有時(shí)候在登錄到MySQL服務(wù)器時(shí)會(huì)遇到1130錯(cuò)誤,這是因?yàn)闊o(wú)法連接到MySQL服務(wù)器或其他一些原因,這篇文章主要給大家介紹了關(guān)于解決MySQL登錄報(bào)錯(cuò)1130:1130?Host?***.***.***.***?is?not?allowed?to?connect?to?this?MySQL?server的相關(guān)資料,需要的朋友可以參考下
    2023-12-12
  • Mysql開(kāi)啟慢SQL并分析原因

    Mysql開(kāi)啟慢SQL并分析原因

    今天小編就為大家分享一篇關(guān)于Mysql開(kāi)啟慢SQL并分析原因,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-04-04
  • 關(guān)于數(shù)據(jù)庫(kù)中的查詢(xún)優(yōu)化

    關(guān)于數(shù)據(jù)庫(kù)中的查詢(xún)優(yōu)化

    這篇文章主要介紹了關(guān)于數(shù)據(jù)庫(kù)中的查詢(xún)優(yōu)化,對(duì)于大型的應(yīng)用系統(tǒng),數(shù)據(jù)動(dòng)輒上百萬(wàn),就需要了解DBMS對(duì)查詢(xún)語(yǔ)句的處理過(guò)程和優(yōu)化算法,更好的利用其優(yōu)化算法,以提高系統(tǒng)的性能,需要的朋友可以參考下
    2023-07-07
  • MySQL內(nèi)存表的特性與使用介紹

    MySQL內(nèi)存表的特性與使用介紹

    臨時(shí)表和內(nèi)存表都可以人工創(chuàng)建,但臨時(shí)表更多的作用是系統(tǒng)自己創(chuàng)建后,組織數(shù)據(jù)以提升性能,如子查詢(xún),臨時(shí)表在多個(gè)連接之間不能共享。這里只討論內(nèi)存表
    2013-02-02
  • MySQL如何比較時(shí)間(datetime)大小

    MySQL如何比較時(shí)間(datetime)大小

    這篇文章主要介紹了MySQL如何比較時(shí)間(datetime)大小,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • Window10下mysql 5.7.21 安裝配置方法圖文教程

    Window10下mysql 5.7.21 安裝配置方法圖文教程

    這篇文章主要為大家詳細(xì)介紹了Window10下mysql 5.7.21 安裝配置方法圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-09-09
  • MySQL 兩種恢復(fù)數(shù)據(jù)的方法

    MySQL 兩種恢復(fù)數(shù)據(jù)的方法

    這篇文章主要介紹了MySQL 兩種恢復(fù)數(shù)據(jù)的方法,幫助恢復(fù)線(xiàn)上數(shù)據(jù),保證數(shù)據(jù)完整,感興趣的朋友可以了解下
    2020-10-10
  • mysql數(shù)據(jù)庫(kù)從服務(wù)器移植到個(gè)人PC的方法

    mysql數(shù)據(jù)庫(kù)從服務(wù)器移植到個(gè)人PC的方法

    有時(shí)候本地也需要數(shù)據(jù)庫(kù)進(jìn)行測(cè)試,那么就需要將服務(wù)器的東西移植到本地,如果有服務(wù)器控制權(quán)限,可以直接復(fù)制mysql的目錄(windows下),如果是別的那么就需要下面的方法了。
    2011-08-08
  • 在MySQL中使用子查詢(xún)和標(biāo)量子查詢(xún)的基本操作教程

    在MySQL中使用子查詢(xún)和標(biāo)量子查詢(xún)的基本操作教程

    這篇文章主要介紹了在MySQL中使用子查詢(xún)和標(biāo)量子查詢(xún)的基本操作教程,子查詢(xún)的使用時(shí)MySQL入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-12-12

最新評(píng)論