這篇文章為大家帶來了關於mysql的相關知識,其中主要介紹了關於觸發器的相關問題,包括了什麼是觸發器、怎麼在資料庫中建立觸發器、觸發器能否取代外鍵,下面一起來看一下,希望對大家有幫助。
推薦學習:mysql影片教學
概念:觸發器(trigger)是SQL server 提供給程式設計師和資料分析員來保證資料完整性的一種方法,它是與表格事件相關的特殊的儲存過程,它的執行不是由程式調用,也不是手動啟動,而是由事件來觸發,例如當對一個表進行操作( insert,delete, update)時就會啟動它執行。觸發器經常用於加強資料的完整性約束和業務規則等。觸發器可以從 DBA_TRIGGERS ,USER_TRIGGERS 資料字典中查到。 SQL3的觸發器是一個能由系統自動執行對資料庫修改的語句。
範例一:建立一個使用者表(使用者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 ;
delete from user WHERE name='张三'
#觸發器能否完全取代外鍵
上面的例二如果用外鍵也可以實現同樣的效果,那麼是不是說明外鍵可以做到的,觸發器都可以做到,外鍵做不到的觸發器也可以做到呢? 與外鍵相比,觸發器的彈性更高功能更多,可以執行更多功能在一定程度上可以取代外鍵,實現外鍵的功能。
###觸發器也可用於強制引用完整性,以便在多個表中新增、更新或刪除資料列時,保留在這些表之間所定義的關係。然而,強制引用完整性的最佳方法是在相關表中定義主鍵和外鍵約束。如果使用資料庫關係圖,則可以在表之間建立關係以自動建立外鍵約束。 ############總結:### 觸發器在某些時候可以取代外鍵,並不是所有情況都可以取代。外鍵和觸發器也可以合併使用######推薦學習:###mysql影片教學#######以上是一起聊聊MYSQL資料庫觸發器的詳細內容。更多資訊請關注PHP中文網其他相關文章!