一起聊聊MYSQL資料庫觸發器

2022-04-12 19:00:47
本篇文章給大家帶來了關於的相關知識,其中主要介紹了關於觸發器的相關問題,包括了什麼是觸發器、怎麼在資料庫中建立觸發器、觸發器能否代替外來鍵,下面一起來看一下,希望對大家有幫助。

推薦學習:

先了解一下觸發器,再來討論是否能完全代替外來鍵

什麼是觸發器?

概念:觸發器(trigger)是SQL server 提供給程式設計師和資料分析員來保證資料完整性的一種方法,它是與表事件相關的特殊的儲存過程,它的執行不是由程式呼叫,也不是手工啟動,而是由事件來觸發,比如當對一個表進行操作( insert,delete, update)時就會啟用它執行。觸發器經常用於加強資料的完整性約束和業務規則等。 觸發器可以從 DBA_TRIGGERS ,USER_TRIGGERS 資料字典中查到。SQL3的觸發器是一個能由系統自動執行對資料庫修改的語句。

  • 通俗的來講,觸發器就是一個觸發裝置,裝置裡面存有一段操作。這個裝置有觸發條件,達到某個條件就會觸發這個裝置,觸發裝置就會執行儲存的一段操作。

如何在資料庫中建立觸發器

建立觸發器範例(關鍵詞:trigger)

例一:建立一個使用者表(使用者ID,使用者姓名),建立一個觸發器(當使用者表中插入資料時,自動生成一個全域性唯一的ID)

先建立user表

create table user(
id int PRIMARY KEY,
name varchar(20)
);

在這裡插入圖片描述
建立觸發器

-- 建立觸發器名為tt
create TRIGGER tt
-- 觸發條件,向user表中插入資料時啟動觸發器
BEFORE insert on user
-- 檢查表中每一行,對新插入的資料進行操作
for EACH ROW
-- 執行操作
BEGIN 
set new.id=UUID();
END

剛剛建立的觸發器(檢視當前資料庫下全部觸發器的程式碼show triggers)
在這裡插入圖片描述
效果:向表中插入三個使用者名稱,自動生成三個ID

insert user(name) VALUE('張三'),('李四'),('王五')

在這裡插入圖片描述
例二:再建立一個訂單表DD(訂單ID,商品名稱,使用者ID),建立一個觸發器tq1(當刪除一個使用者時,該使用者的訂單也將刪除)
建表

create table DD(
ddid int PRIMARY KEY,
ddname VARCHAR(20),
userid VARCHAR(50)
)

在這裡插入圖片描述
建立觸發器

delimiter $
-- 建立觸發器名為tq
create TRIGGER tq1
-- 觸發條件,再dd表刪除資料之後啟動觸發器
AFTER DELETE on user
-- 檢查表中每一行,對新插入的資料進行操作
for EACH ROW
-- 執行操作
BEGIN  
DELETE FROM dd WHERE old.id=userid;
END $ 
delimiter ;

在這裡插入圖片描述
向表中新增兩條資料
在這裡插入圖片描述

效果:刪除user表中的使用者,dd表中的記錄也跟隨刪除
刪除張三

delete from user WHERE name='張三'

在這裡插入圖片描述
在這裡插入圖片描述

觸發器能否完全代替外來鍵

  • 上面的例二如果用外來鍵也可以實現同樣的效果,那麼是不是說明外來鍵可以做到的,觸發器都可以做到,外來鍵做不到的觸發器也可以做到呢?
  • 與外來鍵相比,觸發器的靈活性更高功能更多,可以執行更多功能在一定程度上可以代替外來鍵,實現外來鍵的功能。
  • 觸發器也可用於強制參照完整性,以便在多個表中新增、更新或刪除行時,保留在這些表之間所定義的關係。然而,強制參照完整性的最好方法是在相關表中定義主鍵和外來鍵約束。如果使用資料庫關係圖,則可以在表之間建立關係以自動建立外來鍵約束。

總結: 觸發器在某些時候可以代替外來鍵,並不是在所有情況都可以代替。外來鍵和觸發器也可以聯合使用

推薦學習:

以上就是一起聊聊MYSQL資料庫觸發器的詳細內容,更多請關注TW511.COM其它相關文章!