最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

mysql中event的用法詳解

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

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

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

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

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

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

(2)通過SHOW EVENTS命令;

(3)通過SHOW FULL EVENTS命令;

(4)通過查詢information_schema.events表

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

四、基本語法

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

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

SHOW VARIABLES LIKE 'event_scheduler';

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

4.2 創(chuàng)建事件
CREATE EVENT 的語法如下:
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

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

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

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

為了避免命名規(guī)范帶來的不便,最好讓事件名稱具有描述整個(gè)事件的能力。建議命名規(guī)則如下為:動(dò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í)間戳,用來完成單次的計(jì)劃任務(wù)。

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

在兩種計(jì)劃任務(wù)中,時(shí)間戳可以是任意的TIMESTAMP 和DATETIME 數(shù)據(jù)類型,時(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)閉或開啟事件:

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

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

使用BEGIN和END標(biāo)識(shí)符將復(fù)合SQL語句按照?qǐng)?zhí)行順序放在之間。當(dāng)然SQL語句是有限制的,對(duì)它的限制跟函數(shù)Function和觸發(fā)器Trigger 中對(duì)SQL語句的限制是一樣的,如果你在函數(shù)Function 和觸發(fā)器Trigger 中不能使用某些SQL,同樣的在EVENT中也不能使用。明確的來說有下面幾個(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)過的時(shí)間)
And (沒有被執(zhí)行)
Then:
建立一個(gè)新的線程
傳遞事件的SQL語句給新的線程
(該線程在執(zhí)行完畢后會(huì)自動(dòng)關(guān)閉)

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

DROP EVENT
[IF EXISTS]
event_name

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

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

復(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ǔ)過程:
復(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建立數(shù)據(jù)庫時(shí)字符集與排序規(guī)則的選擇詳解

    MySQL建立數(shù)據(jù)庫時(shí)字符集與排序規(guī)則的選擇詳解

    當(dāng)數(shù)據(jù)庫需要適應(yīng)不同的語言就需要有不同的字符集,下面這篇文章主要給大家介紹了關(guān)于MySQL建立數(shù)據(jù)庫時(shí)字符集與排序規(guī)則的選擇的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-06-06
  • mysql觸發(fā)器實(shí)現(xiàn)oracle物化視圖示例代碼

    mysql觸發(fā)器實(shí)現(xiàn)oracle物化視圖示例代碼

    mysql觸發(fā)器實(shí)現(xiàn)oracle物化視圖即不是基于基表的虛表,而是根據(jù)表實(shí)際存在的實(shí)表,需要的朋友可以參考下
    2014-02-02
  • 在MySQL中實(shí)現(xiàn)二分查找的詳細(xì)教程

    在MySQL中實(shí)現(xiàn)二分查找的詳細(xì)教程

    這篇文章主要介紹了在MySQL中實(shí)現(xiàn)二分查找的詳細(xì)教程,來自計(jì)算機(jī)研究生考試原題,需要的朋友可以參考下
    2015-05-05
  • 淺談mysql中int(1)和int(10)的區(qū)別

    淺談mysql中int(1)和int(10)的區(qū)別

    本文主要介紹了淺談mysql中int(1)和int(10)的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • MySQL 函數(shù)索引的優(yōu)化方案

    MySQL 函數(shù)索引的優(yōu)化方案

    這篇文章主要介紹了MySQL 函數(shù)索引及優(yōu)化方案的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)MySQL,感興趣的朋友可以了解下
    2020-09-09
  • MySQL?日志表改造為分區(qū)表

    MySQL?日志表改造為分區(qū)表

    本文主要介紹了MySQL?日志表改造為分區(qū)表,以解決業(yè)務(wù)日志表占用大量存儲(chǔ)空間且刪除操作慢的問題,下面就來具體介紹一下,感興趣的可以了解一下
    2025-02-02
  • MySQL中設(shè)置服務(wù)器級(jí)別的默認(rèn)排序規(guī)則的方法

    MySQL中設(shè)置服務(wù)器級(jí)別的默認(rèn)排序規(guī)則的方法

    collation_server?是一個(gè)系統(tǒng)變量,它定義了服務(wù)器級(jí)別的默認(rèn)排序規(guī)則,本文主要介紹了MySQL中設(shè)置服務(wù)器級(jí)別的默認(rèn)排序規(guī)則的方法,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-08-08
  • mysql聚簇索引的頁分裂原理實(shí)例分析

    mysql聚簇索引的頁分裂原理實(shí)例分析

    這篇文章主要介紹了mysql聚簇索引的頁分裂原理,結(jié)合實(shí)例形式分析了mysql聚簇索引的頁分裂原理與操作注意事項(xiàng),需要的朋友可以參考下
    2019-07-07
  • Mysql 數(shù)據(jù)庫雙機(jī)熱備的配置方法

    Mysql 數(shù)據(jù)庫雙機(jī)熱備的配置方法

    mysql數(shù)據(jù)庫沒有增量備份的機(jī)制,當(dāng)數(shù)據(jù)量太大的時(shí)候備份是一個(gè)很大的問題。還好mysql數(shù)據(jù)庫提供了一種主從備份的機(jī)制,其實(shí)就是把主數(shù)據(jù)庫的所有的數(shù)據(jù)同時(shí)寫到備份數(shù)據(jù)庫中。
    2010-06-06
  • MySQL開啟慢查詢?nèi)罩緇og-slow-queries的方法

    MySQL開啟慢查詢?nèi)罩緇og-slow-queries的方法

    MySQL中提供了一個(gè)慢查詢的日志記錄功能,可以把查詢SQL語句時(shí)間大于多少秒的語句寫入慢查詢?nèi)罩?,日常維護(hù)中可以通過慢查詢?nèi)罩镜挠涗浶畔⒖焖贉?zhǔn)確地判斷問題所在
    2016-05-05

最新評(píng)論

利辛县| 林州市| 宝丰县| 鄂温| 综艺| 彭水| 灵丘县| 嫩江县| 清远市| 宁城县| 天等县| 运城市| 济南市| 上思县| 塘沽区| 赤城县| 阳山县| 阆中市| 浮梁县| 苍梧县| 奎屯市| 驻马店市| 太和县| 兰溪市| 鸡东县| 梅河口市| 太仆寺旗| 伊春市| 富川| 珲春市| 阿坝县| 诸城市| 满城县| 黔西| 滨州市| 肇源县| 桂林市| 苍溪县| 普兰店市| 什邡市| 泾阳县|