mysql存儲過程定時任務
『壹』 mysql如何保存代碼
mysql通過觸發器保存代碼。根據查詢相關公開信息:MySQL允許通過觸發器、存儲過程、函數的形式來存儲代碼,從5.1開始,還可以在定時任務中存放代碼,這個定時任務也稱為事件。
『貳』 mysql存儲過程 和 觸發器的優缺點 問題
缺點是觸發器的缺點,
而有點是存儲過程的優點,
所以推薦使用存儲過程。
『叄』 【MYSQL】存儲過程 循環插入數據
在開發工作中,時常需要模擬數據生成,手動添加顯然效率不高。這時,MySQL的存儲過程就派上了用場。
首先,打開Navicat,找到工具欄中的函數選項,然後選擇新建功能,定位到過程選項。無需設置入參,簡單點擊即可完成步驟一。
接下來,編寫循環插入的核心代碼。只需將代碼段中的表名和欄位名替換為你實際需要的,例如設置一個簡單的WHILE循環,如'i'從1開始,當'i'小於或等於2時,循環執行兩次,如:WHILE (i<=2)。
完成後,保存你的存儲過程。在右側操作欄,單擊運行按鈕,即可執行預設的循環插入操作。這樣,你就可以快速生成所需數量的數據了。
存儲過程的好處在於,一旦創建並保存,後續任何時候需要在相同函數目錄下使用這些數據生成,都能直接調用,非常方便快捷。
『肆』 mysql怎麼讓一個存儲過程定時執行
mysql怎麼讓一個存儲過程定時執行
查看event是否開啟: show variables like '%sche%';
將事件計劃開啟: set global event_scheler=1;
關閉事件任務: alter event e_test ON COMPLETION PRESERVE DISABLE;
開戶事件任務: alter event e_test ON COMPLETION PRESERVE ENABLE;
簡單實例.
創建表 CREATE TABLE test(endtime DATETIME);
創建存儲過程test
CREATE PROCEDURE test ()
BEGIN
update examinfo SET endtime = now() WHERE id = 14;
END;
創建event e_test
CREATE EVENT if not exists e_test
on schele every 30 second
on completion preserve
do call test();
每隔30秒將執行存儲過程test,將當前時間更新到examinfo表中id=14的記錄的endtime欄位中去
1) 首先來看一個簡單的例子來演示每秒插入一條記錄到數據表
USE test;
CREATE TABLE aaa (timeline TIMESTAMP);
CREATE EVENT e_test_insert
ON SCHEDULE EVERY 1 SECOND
DO INSERT INTO test.aaa VALUES (CURRENT_TIMESTAMP);
等待3秒鍾後,再執行查詢看看:
mysql> SELECT * FROM aaa;
+---------------------+
| timeline |
+---------------------+
| 2007-07-18 20:44:26 |
| 2007-07-18 20:44:27 |
| 2007-07-18 20:44:28 |
+---------------------+
2) 5天後清空test表:
CREATE EVENT e_test
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 5 DAY
DO TRUNCATE TABLE test.aaa;
3) 2007年7月20日12點整清空test表:
CREATE EVENT e_test
ON SCHEDULE AT TIMESTAMP '2007-07-20 12:00:00'
DO TRUNCATE TABLE test.aaa;
4) 每天定時清空test表:
CREATE EVENT e_test
ON SCHEDULE EVERY 1 DAY
DO TRUNCATE TABLE test.aaa;
5) 5天後開啟每天定時清空test表:
CREATE EVENT e_test
ON SCHEDULE EVERY 1 DAY
STARTS CURRENT_TIMESTAMP + INTERVAL 5 DAY
DO TRUNCATE TABLE test.aaa;
6) 每天定時清空test表,5天後停止執行:
CREATE EVENT e_test
ON SCHEDULE EVERY 1 DAY
ENDS CURRENT_TIMESTAMP + INTERVAL 5 DAY
DO TRUNCATE TABLE test.aaa;
7) 5天後開啟每天定時清空test表,一個月後停止執行:
CREATE EVENT e_test
ON SCHEDULE EVERY 1 DAY
STARTS CURRENT_TIMESTAMP + INTERVAL 5 DAY
ENDS CURRENT_TIMESTAMP + INTERVAL 1 MONTH
DO TRUNCATE TABLE test.aaa;
[ON COMPLETION [NOT] PRESERVE]可以設置這個事件是執行一次還是持久執行,默認為NOT PRESERVE。
8) 每天定時清空test表(只執行一次,任務完成後就終止該事件):
CREATE EVENT e_test
ON SCHEDULE EVERY 1 DAY
ON COMPLETION NOT PRESERVE
DO TRUNCATE TABLE test.aaa;
[ENABLE | DISABLE]可是設置該事件創建後狀態是否開啟或關閉,默認為ENABLE。
[COMMENT 『comment』]可以給該事件加上注釋。
三、修改事件(ALTER EVENT)
ALTER EVENT event_name
[ON SCHEDULE schele]
[RENAME TO new_event_name]
[ON COMPLETION [NOT] PRESERVE]
[COMMENT 'comment']
[ENABLE | DISABLE]
[DO sql_statement]
1) 臨時關閉事件
ALTER EVENT e_test DISABLE;
2) 開啟事件
ALTER EVENT e_test ENABLE;
3) 將每天清空test表改為5天清空一次:
ALTER EVENT e_test
ON SCHEDULE EVERY 5 DAY;
四、刪除事件(DROP EVENT)
語 法很簡單,如下所示:
DROP EVENT [IF EXISTS] event_name
例如刪除前面創建的e_test事件
DROP EVENT e_test;
當然前提是這個事件存在,否則會產生ERROR 1513 (HY000): Unknown event錯誤,因此最好加上IF EXISTS
DROP EVENT IF EXISTS e_test;
create event test
ON SCHEDULE AT '2007-09-01 12:00:00' + INTERVAL 1 DAY
on completion not preserve
do insert into yyy values('hhh','uuu');
解釋:從2007-09-01開始,每天對表yyy在12:00:00進行一個插入操作。而且只執行一次(on completion not preserve )
我的計劃任務為:
create event sysplan
ON SCHEDULE AT '2010-05-22 23:00:00' + INTERVAL 1 DAY
on completion not preserve
do truncate table bjproj.ae_tmp;
三、通過設定全局變數event_scheler 的值即可動態的控制事件調度器是否啟用。
查看是否event_scheler開啟mysql> SHOW VARIABLES LIKE '%event%';
設置開啟mysql> SET GLOBAL event_scheler=ON;
四、例子:
每
分鍾插入一條日誌:DELIMITER //CREATE EVENT `user_log_event` ON SCHEDULE EVERY 1
MINUTE STARTS '2010-12-27 00:00:00' ON COMPLETION NOT PRESERVE ENABLE DO
BEGIN INSERT INTO log SET addtime=NOW();END//
調用存儲過程:DELIMITER
//CREATE EVENT `user_log_event` ON SCHEDULE EVERY 1 DAY STARTS
'2010-00-00 00:00:00' ON COMPLETION NOT PRESERVE ENABLE DO BEGIN
CALL user_log_prov();END//
『伍』 Mysql中event用法詳解,零基礎快速入門必看
MySQL中的Event功能詳解,是資料庫對象中用於時間觸發的工具,它類似於Linux的crontab計劃任務,會在預設的時間自動執行SQL語句或存儲過程,實現定時任務。對於那些需要定期執行的任務,如每月第一天的銷售匯總、定期表結構維護等,Event都能派上用場。
創建Event的語法如下:首先,使用CREATE EVENT命令,如果事件不存在則創建,如果已存在則檢查。語法包括事件名、執行時間調度(如單次或重復執行)、執行完成後是否保留、事件狀態(啟用或禁用)以及事件注釋和實際執行內容。例如,創建一個每3秒執行一次的存儲過程的Event,可以寫為:
CREATE EVENT event_name
ON SCHEDULE EVERY 1 SECOND
[ON COMPLETION PRESERVE] -- 保留事件
[DISABLE] -- 禁用事件
COMMENT '備份學生表數據'
DO
BEGIN
-- 存儲過程student_bak_pro的調用
CALL student_bak_pro();
END;
執行時間的設置可以精確到秒、分鍾、小時、天、周或月,如每天20點執行:
ON SCHEDULE EVERY 1 DAY STARTS '2021-06-16 20:00:00'
查看或管理Event,可以使用ALTER或DELETE語句。例如,要檢查或修改event student_bak_pro的設置,可以使用ALTER EVENT命令。
在實際應用中,如定時備份student表,可以先創建student_bak表用於備份,編寫student_bak_pro存儲過程,然後創建Event定時調用該存儲過程,最後驗證新插入的student表數據是否同步到了student_bak表中。