首頁 > 資料庫 > mysql教程 > 一起聊聊MYSQL資料庫觸發器

一起聊聊MYSQL資料庫觸發器

WBOY
發布: 2022-04-12 20:48:20
轉載
1800 人瀏覽過

這篇文章為大家帶來了關於mysql的相關知識,其中主要介紹了關於觸發器的相關問題,包括了什麼是觸發器、怎麼在資料庫中建立觸發器、觸發器能否取代外鍵,下面一起來看一下,希望對大家有幫助。

一起聊聊MYSQL資料庫觸發器

推薦學習:mysql影片教學

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

什麼是觸發器?

概念:觸發器(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)
);
登入後複製

一起聊聊MYSQL資料庫觸發器
#建立觸發器

-- 建立触发器名为tt
create TRIGGER tt
-- 触发条件,向user表中插入数据时启动触发器
BEFORE insert on user
-- 检查表中每一行,对新插入的数据进行操作
for EACH ROW
-- 执行操作
BEGIN 
set new.id=UUID();
END
登入後複製

剛剛建立的觸發器(查看目前資料庫下全部觸發器的程式碼show triggers)
一起聊聊MYSQL資料庫觸發器
#效果:向表中插入三個使用者名,自動產生三個ID

insert user(name) VALUE('张三'),('李四'),('王五')
登入後複製

一起聊聊MYSQL資料庫觸發器
例二:再建立一個訂單表DD(訂單ID,商品名稱,使用者ID),建立一個觸發器tq1(當刪除一個使用者時,該使用者的訂單也會刪除)
建表

create table DD(
ddid int PRIMARY KEY,
ddname VARCHAR(20),
userid VARCHAR(50)
)
登入後複製

一起聊聊MYSQL資料庫觸發器
#建立觸發器##

delimiter $
-- 建立触发器名为tq
create TRIGGER tq1
-- 触发条件,再dd表删除数据之后启动触发器
AFTER DELETE on user
-- 检查表中每一行,对新插入的数据进行操作
for EACH ROW
-- 执行操作
BEGIN  
DELETE FROM dd WHERE old.id=userid;
END $ 
delimiter ;
登入後複製

一起聊聊MYSQL資料庫觸發器

一起聊聊MYSQL資料庫觸發器


#在表中新增兩個資料

一起聊聊MYSQL資料庫觸發器
一起聊聊MYSQL資料庫觸發器

效果

:刪除user表中的用戶,dd表中的記錄也跟著刪除
  • 刪除張三
  • delete from user WHERE name='张三'
    登入後複製

#觸發器能否完全取代外鍵

上面的例二如果用外鍵也可以實現同樣的效果,那麼是不是說明外鍵可以做到的,觸發器都可以做到,外鍵做不到的觸發器也可以做到呢? 與外鍵相比,觸發器的彈性更高功能更多,可以執行更多功能在一定程度上可以取代外鍵,實現外鍵的功能。

###觸發器也可用於強制引用完整性,以便在多個表中新增、更新或刪除資料列時,保留在這些表之間所定義的關係。然而,強制引用完整性的最佳方法是在相關表中定義主鍵和外鍵約束。如果使用資料庫關係圖,則可以在表之間建立關係以自動建立外鍵約束。 ############總結:### 觸發器在某些時候可以取代外鍵,並不是所有情況都可以取代。外鍵和觸發器也可以合併使用######推薦學習:###mysql影片教學#######

以上是一起聊聊MYSQL資料庫觸發器的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:csdn.net
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板