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

MySQL數(shù)據(jù)庫定時任務(wù)舉例講解

 更新時間:2023年06月06日 17:03:31   作者:小流年?°  
最近項(xiàng)目里面的后臺需要用到定時任務(wù),而MySQL從5.0開始自帶了定時事件操作,所以學(xué)習(xí)下并做下記錄,下面這篇文章主要給大家介紹了關(guān)于MySQL數(shù)據(jù)庫定時任務(wù)的相關(guān)資料,需要的朋友可以參考下

1、事件概述

在MySQL 5.1中新增了一個特色功能事件調(diào)度器(Event Scheduler),簡稱事件。它可以作為定時任務(wù)調(diào)度器,取代部分原來只能用操作系統(tǒng)的計(jì)劃任務(wù)才能執(zhí)行的工作。另外,更值得一提的是,MySQL的事件可以實(shí)現(xiàn)每秒鐘執(zhí)行一個任務(wù),這在一些對實(shí)時性要求較高的環(huán)境下是非常實(shí)用的。

事件調(diào)度器是定時觸發(fā)執(zhí)行的,從這個角度上看也可以稱作是“臨時觸發(fā)器”。但是它與觸發(fā)器又有所區(qū)別,觸發(fā)器只針對某個表產(chǎn)生的事件執(zhí)行一些語句,而事件調(diào)度器則是在某一段(間隔)時間執(zhí)行一些語句。

1.1 查看事件調(diào)度器是否開啟

事件由一個特定的線程來管理。啟用事件調(diào)度器后,擁有SUPER權(quán)限的賬戶執(zhí)行SHOW PROCESSLIST就可以看到這個線程了。

SHOW VARIABLES LIKE 'event_scheduler';
SELECT @@event_scheduler;
SHOW PROCESSLIST;

1.2 開啟或關(guān)閉事件調(diào)度器

通過設(shè)定全局變量event_scheduler的值即可動態(tài)的控制事件調(diào)度器是否啟用。開啟MySQL的事件調(diào)度器,可以通過下面兩種方式實(shí)現(xiàn)。

1.2.1 通過設(shè)置全局參數(shù)

使用SET GLOBAL命令可以開啟或關(guān)閉事件。將event_scheduler參數(shù)的值設(shè)置為ON,則開啟事件;如果設(shè)置為OFF,則關(guān)閉事件。使用SET GLOBAL命令可以開啟或關(guān)閉事件。

-- 開啟事件調(diào)度器
SET GLOBAL event_scheduler = ON;
-- 關(guān)閉事件調(diào)度器
SET GLOBAL event_scheduler = OFF;
-- 查看事件調(diào)度器狀態(tài)
SHOW VARIABLES LIKE 'event_scheduler';

注意:如果想要始終開啟事件,那么在使用SET GLOBAL開啟事件后,還需要在my.ini(Windows系統(tǒng))/my.cnf(Linux系統(tǒng))中添加event_scheduler=on。因?yàn)槿绻麤]有添加,MySQL重啟事件后又會回到原來的狀態(tài)。

1.2.2 通過更改配置文件

在MySQL的配置文件my.ini(Windows系統(tǒng))/my.cnf(Linux系統(tǒng))中,找對[mysqld],然后在下面添加以下代碼開啟事件。

 事件調(diào)度器啟動狀態(tài)
event_scheduler = on

在配置文件中添加代碼并保存文件后,還需要重新啟動MySQL服務(wù)器才能生效。通過該方法開啟事件,重啟MySQL服務(wù)器后,不恢復(fù)為系統(tǒng)默認(rèn)的狀態(tài)。

2、創(chuàng)建事件

在MySQL 5.1以上版本中,可以通過CREATE EVENT語句來創(chuàng)建事件。

示例1:創(chuàng)建名稱為event_user的事件,用于每隔5秒鐘向數(shù)據(jù)表tb_user(用戶信息表)中插入一條數(shù)據(jù)。

(1)首先創(chuàng)建tb_user(用戶信息表)。

-- 創(chuàng)建用戶信息表
CREATE TABLE IF NOT EXISTS tb_user
(
	id INT AUTO_INCREMENT PRIMARY KEY COMMENT '用戶編號',
	name VARCHAR(30) NOT NULL COMMENT '用戶姓名',
	create_time TIMESTAMP COMMENT '創(chuàng)建時間'
) COMMENT = '用戶信息表';

(2)創(chuàng)建事件。

– 創(chuàng)建事件

CREATE EVENT IF NOT EXISTS event_user
ON SCHEDULE EVERY 5 SECOND
ON COMPLETION PRESERVE
COMMENT '新增用戶信息定時任務(wù)'
DO INSERT INTO tb_user(name,create_time) VALUES('pan_junbiao的博客',NOW());

示例2:創(chuàng)建一個事件,實(shí)現(xiàn)每個月的第一天凌晨1點(diǎn)統(tǒng)計(jì)一次已經(jīng)注冊的會員人數(shù),并插入到統(tǒng)計(jì)表中。

(1)創(chuàng)建名稱為p_total的存儲過程,用于統(tǒng)計(jì)已經(jīng)注冊的會員人數(shù),并插入到統(tǒng)計(jì)表tb_total中。

CREATE PROCEDURE p_total()
BEGIN
	DECLARE n_total INT default 0;
	SELECT COUNT(*) INTO n_total FROM db_database11.tb_user;
	INSERT INTO tb_total (userNumber,createtime) VALUES(n_total,NOW());
END;

(2)創(chuàng)建名稱為e_autoTotal的事件,用于在每個月的第一天凌晨1點(diǎn)調(diào)用存儲過程。

CREATE EVENT IF NOT EXISTS e_autoTotal
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 CALL p_total();

3、查詢事件

在MySQL中可以通過查詢information_schema.events表,查看已創(chuàng)建的事件。其語句如下:

SELECT * FROM information_schema.events; 

4、修改事件

在MySQL 5.1及以后版本中,事件被創(chuàng)建之后,還可以使用ALTER EVENT語句修改其定義和相關(guān)屬性。其語法如下:

ALTER
	[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;

ALTER EVENT語句與CREATE EVENT語句基本相同。另外ALTER EVENT語句還有一個用法就是讓一個事件關(guān)閉或再次活動。

5、啟動與關(guān)閉事件

另外ALTER EVENT語句還有一個用法就是讓一個事件關(guān)閉或再次活動。

--啟動名稱為event_user的事件。
ALTER EVENT event_user ENABLE;
--關(guān)閉名稱為event_user的事件。
ALTER EVENT event_user DISABLE;

6、刪除事件

在MySQL 5.1及以后版本中,刪除已經(jīng)創(chuàng)建的事件可以使用DROP EVENT語句來實(shí)現(xiàn)。

--刪除名稱為event_user的事件。
DROP EVENT IF EXISTS event_user;

7、時間配置

-- 單位有:SECOND,MINUTE,HOUR,DAY,WEEK(周),QUARTER(季度),MONTH,YEAR
-- 每秒執(zhí)行1次
ON SCHEDULE EVERY 1 SECOND
-- 每兩分鐘執(zhí)行1次
ON SCHEDULE EVERY 2 MINUTE
-- 每3天執(zhí)行1次
ON SCHEDULE EVERY 3 DAY
-- 5天后執(zhí)行
ON SCHEDULE AT CURRENT_TIMESTAMP()+INTERVAL 5 DAY
-- 10分鐘后執(zhí)行
ON SCHEDULE AT CURRENT_TIMESTAMP()+INTERVAL 10 MINUTE
-- 在2016年10月1日,晚上9點(diǎn)50執(zhí)行
ON SCHEDULE AT '2021-12-01 1:50:00'
-- 5天后開始每天都執(zhí)行執(zhí)行到下個月底
ON SCHEDULE EVERY 1 DAY STARTS CURRENT_TIMESTAMP()+INTERVAL 5 DAY ENDS CURRENT_TIMESTAMP()+INTERVAL 1 MONTH
-- 從現(xiàn)在起每天執(zhí)行,執(zhí)行5天
ON SCHEDULE EVERY 1 DAY ENDS CURRENT_TIMESTAMP()+INTERVAL 5 DAY
-- 每天凌晨一點(diǎn)執(zhí)行
ON SCHEDULE EVERY 1 DAY STARTS DATE_ADD(DATE_ADD(CURDATE(), INTERVAL 1 DAY), INTERVAL 1 HOUR)
-- 每個月的五號一點(diǎn)執(zhí)行一次
ON SCHEDULE EVERY 5 MONTH STARTS DATE_ADD(DATE_ADD(DATE_SUB(CURDATE(),INTERVAL DAY(CURDATE())-1 DAY), INTERVAL 1 MONTH),INTERVAL 1 HOUR)
-- 每年一月一號凌晨三點(diǎn)執(zhí)行一次
ON SCHEDULE  EVERY 1 YEAR STARTS DATE_ADD(DATE(CONCAT(YEAR(CURDATE()) + 1,'-',1,'-',1)),INTERVAL 3 HOUR)

demo

-- 查看定時策略是否開啟
show variables like 'event_scheduler';
-- 開啟定時策略(ON是開啟狀態(tài))
set global event_scheduler=1;
-- 創(chuàng)建procedure(存儲過程)
use 123;
delimiter //
create procedure updateTime()
begin
-- (begin后end//前放要定時處理的sql用;結(jié)尾,可以放多個sql)
update demo_table set demo_time = DATE_ADD(NOW(),  INTERVAL  FLOOR(1 + (RAND() * 10800))   SECOND );
end//
delimiter ;
-- 創(chuàng)建定時任務(wù)
create event updateTime_LY
ON SCHEDULE EVERY 1 DAY STARTS DATE_ADD(DATE_ADD(CURDATE(), INTERVAL 1 DAY), INTERVAL 1 HOUR)
on completion preserve disable
do call updateTime();
-- 查看定時任務(wù)事件
SELECT event_name,event_definition,interval_value,interval_field,status FROM information_schema.EVENTS;
-- 開啟和關(guān)閉創(chuàng)建好的事件
alter event updateTime_LY on completion preserve enable;//開啟定時任務(wù)
alter event updateTime_LY on completion preserve disable;//關(guān)閉定時任務(wù)
-- 刪除
drop event updateTime_LY;

總結(jié)

到此這篇關(guān)于MySQL數(shù)據(jù)庫定時任務(wù)的文章就介紹到這了,更多相關(guān)MySQL定時任務(wù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • mysql實(shí)現(xiàn)根據(jù)多個字段查找和置頂功能

    mysql實(shí)現(xiàn)根據(jù)多個字段查找和置頂功能

    在mysql中,如果要實(shí)現(xiàn)根據(jù)某個字段排序的時候,可以使用下面的SQL語句,下面為大家介紹下如何實(shí)現(xiàn)根據(jù)多個字段查找和置頂功能
    2013-11-11
  • Mybatis中的動態(tài)SQL語句解析

    Mybatis中的動態(tài)SQL語句解析

    這篇文章主要介紹了Mybatis中的動態(tài)SQL語句解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-11-11
  • MySQL無法修改主鍵的問題分析及解決方案

    MySQL無法修改主鍵的問題分析及解決方案

    最近同事咨詢了一個問題,TDSQL(for MySQL)中的某張表主鍵需要改為聯(lián)合主鍵,是否必須先刪除現(xiàn)有的主鍵?因?yàn)閯h除主鍵時,提示這個錯誤,所以本文給大家介紹了MySQL無法修改主鍵的問題分析及解決方案,需要的朋友可以參考下
    2024-01-01
  • MySQL表鎖、行鎖、排它鎖及共享鎖的使用詳解

    MySQL表鎖、行鎖、排它鎖及共享鎖的使用詳解

    隨著應(yīng)用對事務(wù)完整性和并發(fā)性要求的不斷提高,MySQL才開始開發(fā)基于事務(wù)的存儲引擎,下面這篇文章主要給大家介紹了關(guān)于MySQL表鎖、行鎖、排它鎖及共享鎖使用的相關(guān)資料,需要的朋友可以參考下
    2022-04-04
  • 如何設(shè)置mysql允許外部連接訪問

    如何設(shè)置mysql允許外部連接訪問

    大家好,本篇文章主要講的是如何設(shè)置mysql允許外部連接訪問,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01
  • insert和select結(jié)合實(shí)現(xiàn)

    insert和select結(jié)合實(shí)現(xiàn)"插入某字段在數(shù)據(jù)庫中的最大值+1"的方法

    今天小編就為大家分享一篇關(guān)于insert和select結(jié)合實(shí)現(xiàn)"插入某字段在數(shù)據(jù)庫中的最大值+1"的方法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • Ubuntu下MySQL中文亂碼的問題解決

    Ubuntu下MySQL中文亂碼的問題解決

    對于MySQL中文亂碼問題(我的是Ubuntu系統(tǒng)),在網(wǎng)上看了很多解決方案,期間也走了不少彎路,所以想著根據(jù)自己的解決之路寫一篇文章分享給有需要的朋友們,所以這篇文章主要介紹了如何解決Ubuntu下MySQL中文亂碼問題的相關(guān)資料,需要的朋友可以參考借鑒。
    2017-02-02
  • 查詢MySQL安裝路徑的兩種方法

    查詢MySQL安裝路徑的兩種方法

    這篇文章主要給大家介紹了關(guān)于查詢MySQL安裝路徑的兩種方法,在使用MySQL時有時需要知道MySQL的安裝路徑才能進(jìn)行相關(guān)操作,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-07-07
  • win10下mysql 8.0.16 winx64安裝圖文最新教程

    win10下mysql 8.0.16 winx64安裝圖文最新教程

    這篇文章主要為大家詳細(xì)介紹了win10下mysql 8.0.16 winx64安裝圖文最新教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • MySQL 快速刪除大量數(shù)據(jù)(千萬級別)的幾種實(shí)踐方案詳解

    MySQL 快速刪除大量數(shù)據(jù)(千萬級別)的幾種實(shí)踐方案詳解

    這篇文章主要介紹了MySQL 快速刪除大量數(shù)據(jù)(千萬級別)的幾種實(shí)踐方案詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07

最新評論

昆山市| 兴隆县| 林口县| 林周县| 罗定市| 云阳县| 称多县| 柞水县| 张家口市| 高淳县| 和龙市| 双牌县| 汝城县| 广元市| 博爱县| 宁陵县| 铜梁县| 西丰县| 武威市| 江山市| 宁海县| 三都| 北票市| 姚安县| 南安市| 九江县| 长丰县| 交城县| 若尔盖县| 安吉县| 彭州市| 偏关县| 鄂州市| 迭部县| 湛江市| 财经| 曲水县| 邹平县| 邯郸市| 黄山市| 宾川县|