所有内容收錄在合集~MySQL入門到熟練。歡迎點贊關注我哦~
Triggers 觸發器
觸發器聽起來好像是扳機什麼的,其實就是在插入,更新和删除語句前後自動執行的一堆SQL代碼。
可以增強資料的一緻性,打個比方,在表格資料中,一個id下可能有幾筆訂單,幾個發票,表格裡面的值是互相對應的,有一個總值。如果這個時候,添加新的記錄,比如加了一行,那麼總值也會有變化。
那麼觸發器怎麼用呢?
當然也是創造出來啦 create 然後明确表名
接着就是輸入之後或者之前,表示什麼時候觸發,也可以是更新或者删除,根據情況有:
after insert on after update on after delete on
before insert on before update on before delete on
注意上方又又又出現了begin和end,觸發器的主體我們可以寫任意的SQL代碼來修改資料,增強一緻性。可以直接寫SQL代碼或者調用存儲過程,這次試試更新金額,增加總額
最後寫引爆觸發的SQL語句類型,添加在begin和end之間,建立完成。執行沒有報錯就是已經執行。然後注意寫的時候,不要寫錯資料庫,避免C資料庫的代碼寫到A裡面。我又一個沒注意檢查半天,然後更改payments表格,在invoice表格裡面進行驗證。
更新或者删除的時候,new更換成old,NEW.後面的點代表可以擷取單獨屬性。補上驗證的圖,0改為10了。
對應的,如果是删除付款的時候,觸發器這樣寫,表名等僅供參考
特點:
1 觸發器可以更改任何表中的資料,除了這個觸發器所在表。否則就會無限的循環。
2 支援行級觸發器,比如執行一條update語句,影響了10行,觸發器會被觸發10次
3 不支援語句級觸發器,執行一條update,不管這個影響幾行,隻觸發一次
檢視觸發器
寫好之後在左邊的面闆,是找不到的,
是以直接書寫檢視就好了,這樣展現是所有的觸發器
單一觸發器這樣寫,先寫like,然後是引号,裡面是字首和%,同時一定注意命名的時候,規範命名是表名_after/before_insert/delete/update的形式,剛才的名字純屬偷懶。
删除觸發器
直接寫,删除+if exist+表名
删除+建立應該放在同一個腳本檔案中,同時錄入一個源代碼庫中。這樣有曆史資料庫修改記錄。
審計 Auditing
初步是為一張表進行設計,後續是為多張表進行設計,不過那就需要架構的知識了。比如怎麼樣設計資料庫?反轉目前還沒到那一步。
首先打開一張表,還是用create,創造一張新表。直接用大神的,然後執行,重新整理,左邊就出現了。
是一個像麻雀一樣的表,雖然很簡化,但能用啊
然後結合剛才寫的觸發器,更新,并在審計表中插入記錄
就是添加一條insert,指派裡面都加一個new,後面加上now函數
對應的,如果是删除的,那就把new更換成old,insert換成delete,
然後重建一下觸發器
重複在payments裡面的添加付款記錄
insert into sql_invoicing.payments
values (default,5,5,'2023-01-01',1,1)
添加成功。
然後打開剛才建立的審計表,就可以清晰的看到記錄。什麼時間,插入了資料,金額日期,id都在上面。
Events 增删改查
一堆執行代碼,可以隻執行一次,或者每月一次等時間執行
主要用來自動化資料庫的維護,比如删除過期資料,将表複制到存檔表,彙總資料生成報告。
第一步打開背景程度,排程器。一直執行需要執行的事件
可以看到很多内容
然後使用like操作符,找出需要找到的那個
後面自動顯示的是on,開啟
可以設定是開啟或者關閉
SET GLOBLE event_scheduler=ON
SET GLOBLE event_scheduler=OFF
然後,可以自己創造事件
開頭還是分隔符,create
後面接着名稱,也是根據時間_(年月日小時分鐘)_XX_XX命名
接着就是SCHEDULE
計劃在時間上怎麼執行,頻率是怎麼樣
如果單次,直接定某個時間
AT ‘2023-01-01’
如果定期,EVER加區間
EVER 1hour/year等
還可以添加起始時間,結束時間
EVER 1 year ‘2023-01-01’ END ‘2033-01-01’
然後接着還是begin和end,不同的是加了DO
直接用mosh寫的例子
然後主體部分添加起來
回顧一下,之前的excel裡面用過的函數,DATEADD,DATESUB
是以可以寫
DATEADD(now(), INTERVAL- 1 YEAR)
DATESUB(now(), INTERVAL 1 YEAR)
檢視事件
全部寫:show events;單個事件寫:show events like ‘XX%’
删除事件
DROP EVENT IF EXISTS 表名
ALTER EVENT 修改事件
ALTER EVENT 表名 DISABLE/ENABLE
完結~