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

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

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

1、事件概述

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

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

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

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

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

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

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

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

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

-- 開啟事件調(diào)度器
SET GLOBAL event_scheduler = ON;
-- 關閉事件調(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。因為如果沒有添加,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服務器才能生效。通過該方法開啟事件,重啟MySQL服務器后,不恢復為系統(tǒng)默認的狀態(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 '新增用戶信息定時任務'
DO INSERT INTO tb_user(name,create_time) VALUES('pan_junbiao的博客',NOW());

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

(1)創(chuàng)建名稱為p_total的存儲過程,用于統(tǒng)計已經(jīng)注冊的會員人數(shù),并插入到統(tǒng)計表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à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語句修改其定義和相關屬性。其語法如下:

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語句還有一個用法就是讓一個事件關閉或再次活動。

5、啟動與關閉事件

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

--啟動名稱為event_user的事件。
ALTER EVENT event_user ENABLE;
--關閉名稱為event_user的事件。
ALTER EVENT event_user DISABLE;

6、刪除事件

在MySQL 5.1及以后版本中,刪除已經(jīng)創(chuàng)建的事件可以使用DROP EVENT語句來實現(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點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
-- 每天凌晨一點執(zhí)行
ON SCHEDULE EVERY 1 DAY STARTS DATE_ADD(DATE_ADD(CURDATE(), INTERVAL 1 DAY), INTERVAL 1 HOUR)
-- 每個月的五號一點執(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)
-- 每年一月一號凌晨三點執(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用;結尾,可以放多個sql)
update demo_table set demo_time = DATE_ADD(NOW(),  INTERVAL  FLOOR(1 + (RAND() * 10800))   SECOND );
end//
delimiter ;
-- 創(chuàng)建定時任務
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();
-- 查看定時任務事件
SELECT event_name,event_definition,interval_value,interval_field,status FROM information_schema.EVENTS;
-- 開啟和關閉創(chuàng)建好的事件
alter event updateTime_LY on completion preserve enable;//開啟定時任務
alter event updateTime_LY on completion preserve disable;//關閉定時任務
-- 刪除
drop event updateTime_LY;

總結

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

相關文章

  • MYSQL更新優(yōu)化實錄

    MYSQL更新優(yōu)化實錄

    本文給大家分享的是個人在對mysql數(shù)據(jù)進行刷新的時候遇到的一個效率非常低下的問題的解決全過程,主要是針對sql語句來進行優(yōu)化,有查找問題的方法,有解決方法,非常的詳細,小伙伴可以參考下。
    2015-08-08
  • MySQL分批插入/更新數(shù)據(jù)方式

    MySQL分批插入/更新數(shù)據(jù)方式

    文章介紹了如何使用MySQL分批插入/更新數(shù)據(jù),以避免大 SQL 語句導致的更新失敗或拋出異常,通過手寫分批代碼或使用 Guava 庫的 partition 方法,可以簡化批量操作,同時,文章還提到如何使用 partition 方法進行分組查詢
    2025-02-02
  • MySQL優(yōu)化SQL語句的技巧

    MySQL優(yōu)化SQL語句的技巧

    這篇文章主要介紹了常見優(yōu)化SQL語句的技巧,幫助大家更好的提高數(shù)據(jù)庫的性能,感興趣的朋友可以了解下
    2020-08-08
  • mysql 5.7.17的最新安裝教程圖文詳解

    mysql 5.7.17的最新安裝教程圖文詳解

    mysql-5.7.17-winx64是現(xiàn)在最新版本的Mysql,這是免安裝的,所以要進行些配置,下面通過本文給大家介紹mysql 5.7.17的最新安裝教程圖文詳解,感興趣的朋友一起學習吧
    2017-03-03
  • mysql下的max_allowed_packet參數(shù)設置詳解

    mysql下的max_allowed_packet參數(shù)設置詳解

    本文主要介紹了mysql下的max_allowed_packet參數(shù)設置詳解,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • MySQL在Centos7環(huán)境安裝的完整步驟記錄

    MySQL在Centos7環(huán)境安裝的完整步驟記錄

    在CentOS7環(huán)境下安裝MySQL是一項常見的任務,尤其對于那些沒有網(wǎng)絡連接或者需要在隔離環(huán)境中的開發(fā)者來說,離線安裝MySQL顯得尤為重要,這篇文章主要介紹了MySQL在Centos7環(huán)境安裝的完整步驟,需要的朋友可以參考下
    2024-10-10
  • Linux中使用mysqladmin extended-status配合Linux命令查看MySQL運行狀態(tài)

    Linux中使用mysqladmin extended-status配合Linux命令查看MySQL運行狀態(tài)

    這篇文章主要介紹了Linux中使用mysqladmin extended-status配合Linux命令查看MySQL運行狀態(tài),需要的朋友可以參考下
    2014-08-08
  • MySQL 語句執(zhí)行順序舉例解析

    MySQL 語句執(zhí)行順序舉例解析

    這篇文章主要介紹了MySQL 語句執(zhí)行順序舉例解析,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值需要的小伙伴可以參考一下
    2022-06-06
  • MySQL 8.0.20 Window10免安裝版配置及Navicat管理教程圖文詳解

    MySQL 8.0.20 Window10免安裝版配置及Navicat管理教程圖文詳解

    這篇文章主要介紹了MySQL 8.0.20 Window10免安裝版配置及Navicat管理,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-06-06
  • 解決mysql的賦權操作之GRANT ALL PRIVILEGES ON *.* TO ‘root‘@‘%‘ IDENTIFIED BY ‘123456‘ WITH GRANT OPTION問題

    解決mysql的賦權操作之GRANT ALL PRIVILEGES ON *.*

    這篇文章主要介紹了解決mysql的賦權操作之GRANT ALL PRIVILEGES ON *.* TO ‘root‘@‘%‘ IDENTIFIED BY ‘123456‘ WITH GRANT OPTION問題,本文給大家分享兩種情況分析分享解決方案,感興趣的朋友一起看看吧
    2022-11-11

最新評論