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) );
建立觸發器
-- 建立觸發器名為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數據庫觸發器從小白到精通的文章就介紹到這瞭,更多相關MySQL 觸發器內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!