天天看點

SQL第31課~觸發器的檢視和使用,怎麼進行審計功能

作者:小餅幹筆記

所有内容收錄在合集~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表格裡面進行驗證。

SQL第31課~觸發器的檢視和使用,怎麼進行審計功能

更新或者删除的時候,new更換成old,NEW.後面的點代表可以擷取單獨屬性。補上驗證的圖,0改為10了。

SQL第31課~觸發器的檢視和使用,怎麼進行審計功能

對應的,如果是删除付款的時候,觸發器這樣寫,表名等僅供參考

SQL第31課~觸發器的檢視和使用,怎麼進行審計功能
SQL第31課~觸發器的檢視和使用,怎麼進行審計功能
SQL第31課~觸發器的檢視和使用,怎麼進行審計功能

特點:

1 觸發器可以更改任何表中的資料,除了這個觸發器所在表。否則就會無限的循環。

2 支援行級觸發器,比如執行一條update語句,影響了10行,觸發器會被觸發10次

3 不支援語句級觸發器,執行一條update,不管這個影響幾行,隻觸發一次

檢視觸發器

寫好之後在左邊的面闆,是找不到的,

是以直接書寫檢視就好了,這樣展現是所有的觸發器

SQL第31課~觸發器的檢視和使用,怎麼進行審計功能

單一觸發器這樣寫,先寫like,然後是引号,裡面是字首和%,同時一定注意命名的時候,規範命名是表名_after/before_insert/delete/update的形式,剛才的名字純屬偷懶。

SQL第31課~觸發器的檢視和使用,怎麼進行審計功能

删除觸發器

直接寫,删除+if exist+表名

SQL第31課~觸發器的檢視和使用,怎麼進行審計功能

删除+建立應該放在同一個腳本檔案中,同時錄入一個源代碼庫中。這樣有曆史資料庫修改記錄。

審計 Auditing

初步是為一張表進行設計,後續是為多張表進行設計,不過那就需要架構的知識了。比如怎麼樣設計資料庫?反轉目前還沒到那一步。

SQL第31課~觸發器的檢視和使用,怎麼進行審計功能

首先打開一張表,還是用create,創造一張新表。直接用大神的,然後執行,重新整理,左邊就出現了。

SQL第31課~觸發器的檢視和使用,怎麼進行審計功能

是一個像麻雀一樣的表,雖然很簡化,但能用啊

SQL第31課~觸發器的檢視和使用,怎麼進行審計功能

然後結合剛才寫的觸發器,更新,并在審計表中插入記錄

就是添加一條insert,指派裡面都加一個new,後面加上now函數

對應的,如果是删除的,那就把new更換成old,insert換成delete,

然後重建一下觸發器

SQL第31課~觸發器的檢視和使用,怎麼進行審計功能

重複在payments裡面的添加付款記錄

insert into sql_invoicing.payments

values (default,5,5,'2023-01-01',1,1)

添加成功。

SQL第31課~觸發器的檢視和使用,怎麼進行審計功能

然後打開剛才建立的審計表,就可以清晰的看到記錄。什麼時間,插入了資料,金額日期,id都在上面。

SQL第31課~觸發器的檢視和使用,怎麼進行審計功能

Events 增删改查

一堆執行代碼,可以隻執行一次,或者每月一次等時間執行

主要用來自動化資料庫的維護,比如删除過期資料,将表複制到存檔表,彙總資料生成報告。

第一步打開背景程度,排程器。一直執行需要執行的事件

可以看到很多内容

SQL第31課~觸發器的檢視和使用,怎麼進行審計功能

然後使用like操作符,找出需要找到的那個

後面自動顯示的是on,開啟

SQL第31課~觸發器的檢視和使用,怎麼進行審計功能

可以設定是開啟或者關閉

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寫的例子

SQL第31課~觸發器的檢視和使用,怎麼進行審計功能

然後主體部分添加起來

SQL第31課~觸發器的檢視和使用,怎麼進行審計功能

回顧一下,之前的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

完結~