溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

MySQL數(shù)據(jù)庫觸發(fā)器怎么建立

發(fā)布時(shí)間:2022-03-09 16:13:17 來源:億速云 閱讀:255 作者:iii 欄目:開發(fā)技術(shù)

本篇內(nèi)容主要講解“MySQL數(shù)據(jù)庫觸發(fā)器怎么建立”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“MySQL數(shù)據(jù)庫觸發(fā)器怎么建立”吧!

什么是觸發(fā)器?

概念:觸發(fā)器(trigger)是SQL server 提供給程序員和數(shù)據(jù)分析員來保證數(shù)據(jù)完整性的一種方法,它是與表事件相關(guān)的特殊的存儲(chǔ)過程,它的執(zhí)行不是由程序調(diào)用,也不是手工啟動(dòng),而是由事件來觸發(fā),比如當(dāng)對一個(gè)表進(jìn)行操作( insert,delete, update)時(shí)就會(huì)激活它執(zhí)行。觸發(fā)器經(jīng)常用于加強(qiáng)數(shù)據(jù)的完整性約束和業(yè)務(wù)規(guī)則等。 觸發(fā)器可以從 DBA_TRIGGERS ,USER_TRIGGERS 數(shù)據(jù)字典中查到。SQL3的觸發(fā)器是一個(gè)能由系統(tǒng)自動(dòng)執(zhí)行對數(shù)據(jù)庫修改的語句。

通俗的來講,觸發(fā)器就是一個(gè)觸發(fā)裝置,裝置里面存有一段操作。這個(gè)裝置有觸發(fā)條件,達(dá)到某個(gè)條件就會(huì)觸發(fā)這個(gè)裝置,觸發(fā)裝置就會(huì)執(zhí)行存儲(chǔ)的一段操作。

如何在數(shù)據(jù)庫中建立觸發(fā)器

建立觸發(fā)器實(shí)例(關(guān)鍵詞:trigger)

例一:建立一個(gè)用戶表(用戶ID,用戶姓名),建立一個(gè)觸發(fā)器(當(dāng)用戶表中插入數(shù)據(jù)時(shí),自動(dòng)生成一個(gè)全局唯一的ID)

先建立user表

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

MySQL數(shù)據(jù)庫觸發(fā)器怎么建立

建立觸發(fā)器

-- 建立觸發(fā)器名為tt
create TRIGGER tt
-- 觸發(fā)條件,向user表中插入數(shù)據(jù)時(shí)啟動(dòng)觸發(fā)器
BEFORE insert on user
-- 檢查表中每一行,對新插入的數(shù)據(jù)進(jìn)行操作
for EACH ROW
-- 執(zhí)行操作
BEGIN 
set new.id=UUID();
END

剛剛建立的觸發(fā)器(查看當(dāng)前數(shù)據(jù)庫下全部觸發(fā)器的代碼show triggers)

MySQL數(shù)據(jù)庫觸發(fā)器怎么建立

效果:向表中插入三個(gè)用戶名,自動(dòng)生成三個(gè)ID

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

MySQL數(shù)據(jù)庫觸發(fā)器怎么建立

例二:再建立一個(gè)訂單表DD(訂單ID,商品名稱,用戶ID),建立一個(gè)觸發(fā)器tq1(當(dāng)刪除一個(gè)用戶時(shí),該用戶的訂單也將刪除) 建表

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

MySQL數(shù)據(jù)庫觸發(fā)器怎么建立

建立觸發(fā)器

delimiter $
-- 建立觸發(fā)器名為tq
create TRIGGER tq1
-- 觸發(fā)條件,再dd表刪除數(shù)據(jù)之后啟動(dòng)觸發(fā)器
AFTER DELETE on user
-- 檢查表中每一行,對新插入的數(shù)據(jù)進(jìn)行操作
for EACH ROW
-- 執(zhí)行操作
BEGIN  
DELETE FROM dd WHERE old.id=userid;
END $ 
delimiter ;

MySQL數(shù)據(jù)庫觸發(fā)器怎么建立

向表中添加兩條數(shù)據(jù)

MySQL數(shù)據(jù)庫觸發(fā)器怎么建立

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

delete from user WHERE name='張三'

MySQL數(shù)據(jù)庫觸發(fā)器怎么建立

MySQL數(shù)據(jù)庫觸發(fā)器怎么建立

觸發(fā)器能否完全代替外鍵

  • 上面的例二如果用外鍵也可以實(shí)現(xiàn)同樣的效果,那么是不是說明外鍵可以做到的,觸發(fā)器都可以做到,外鍵做不到的觸發(fā)器也可以做到呢?

  • 與外鍵相比,觸發(fā)器的靈活性更高功能更多,可以執(zhí)行更多功能在一定程度上可以代替外鍵,實(shí)現(xiàn)外鍵的功能。

  • 觸發(fā)器也可用于強(qiáng)制引用完整性,以便在多個(gè)表中添加、更新或刪除行時(shí),保留在這些表之間所定義的關(guān)系。然而,強(qiáng)制引用完整性的最好方法是在相關(guān)表中定義主鍵和外鍵約束。如果使用數(shù)據(jù)庫關(guān)系圖,則可以在表之間創(chuàng)建關(guān)系以自動(dòng)創(chuàng)建外鍵約束。

總結(jié): 觸發(fā)器在某些時(shí)候可以代替外鍵,并不是在所有情況都可以代替。外鍵和觸發(fā)器也可以聯(lián)合使用

到此,相信大家對“MySQL數(shù)據(jù)庫觸發(fā)器怎么建立”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI