iT邦幫忙

2022 iThome 鐵人賽

DAY 11
0
Modern Web

MySQL,我的超人系列 第 11

Day11-MySQL的事件(Events)

  • 分享至 

  • xImage
  •  

排程

在linux 中,如果想要定期執行某些程式或是指令,管理者可以使用crontab來進行設定,在MySQL中也有類似的功能,事件(Events),被用於定期執行某些資料庫任務

用途

1.自動化維護
2.刪除過期數據
3.複製存檔/生成報告

範例

假設foods表裡每天都有過期的食物需要報廢,在2022-09-25~2022-10-02,便可以撰寫如下的排程

CREATE EVENT daily_delete_expired_foods -- 創建Events

ON SCHEDULE  
    EVERY 1 DAY [STARTS '2022-09-25'] [ENDS '2022-10-02'] -- 設定時間段   

DO BEGIN
    DELETE FROM foods -- 從foods表中刪除過期的食品
    WHERE `deletion_time` > NOW();
    

基本使用

查詢、刪除

SHOW EVENTS;  --查詢

DROP EVENT IF EXISTS <event_name>; --刪除,IF EXISTS可以避免報錯

實際操作

1.先創一個表,products,欄位有id、product、created_at

2.創建一個EVENT,排程設定每分鐘往表裡插入一支筆

CREATE EVENT insert_event_01 -- 名稱
ON SCHEDULE EVERY 1 MINUTE -- 每一分鐘執行一次
STARTS CURRENT_TIMESTAMP -- 從現在開始
ENDS CURRENT_TIMESTAMP + INTERVAL 1 HOUR -- 一小時後結束
DO
   INSERT INTO products(id,product,created_at) -- 插入筆這個商品
   VALUES(default,'筆',NOW());
   

3.就可以看到products一分鐘新增一支筆了

https://ithelp.ithome.com.tw/upload/images/20220925/20144865tTkVHt6Ce7.jpg

4.如果沒有執行成功可能是因為還沒有啟用事件排程,打這行就可以解決了

SET GLOBAL event_scheduler = ON;

5.可以用這個指令查看目前正在執行的程序

SHOW PROCESSLIST;

https://ithelp.ithome.com.tw/upload/images/20220925/20144865xnx5cMRNfR.jpg

10天心得回顧

不知不覺就打完10篇了,感覺自己又離訂下的目標進了一步,下個禮拜要寫的主題會牽涉到蠻多資料庫重要的觀念,像是鎖、ACID、競爭條件,看來下個禮拜要加把勁了,話說這個禮拜每天就開始構思、實作、打文章,比以前回家就開電腦來玩充實多了,而且充滿成就感。

有時候會想說乾脆趁著六日,多寫幾篇文章囤起來放,不然某幾天遇到燒腦問題回家時,真的很想躺床上當馬鈴薯,後來想想還是覺得算了,感覺一次寫太多會降低文章的品質,還是踏踏實實的一天發一篇好了。

預告

Day12-MySQL的交易(Transactions)


上一篇
Day10-MySQL的觸發(Triggers)
下一篇
Day12-MySQL的交易(Transactions)
系列文
MySQL,我的超人30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言