MySQL數據庫觸發器從小白到精通

 更新時間:2022年03月09日 16:45:01   作者:桃花鍵神  
觸發器是SQLserver提供給程序員和數據分析員來保證數據完整性的一種方法,它是與表事件相關的特殊的存儲過程,它的執行不是由程序調用,也不是手工啟動,而是由事件來觸發,比如當對一個表進行操作時就會激活它執行。觸發器經常用于加強數據的完整性約束和業務規則等

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

什么是觸發器?

概念:觸發器(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 觸發器內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • MySQL中NOT IN填坑之列為null的問題解決

    MySQL中NOT IN填坑之列為null的問題解決

    這篇文章主要給大家介紹了關于MySQL中NOT IN填坑之列為null的問題解決的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用MySQL具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-11-11
  • Mysql大型SQL文件快速恢復方案分享

    Mysql大型SQL文件快速恢復方案分享

    這篇文章主要給大家介紹了關于Mysql大型SQL文件快速恢復方案的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Mysql具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-09-09
  • centOS7安裝MySQL數據庫

    centOS7安裝MySQL數據庫

    本文給大家簡單介紹了如何在centOS7下安裝MySQL5.6數據庫的方法,以及一些注意事項,希望對大家實用mysql能夠有所幫助
    2016-12-12
  • mysql中insert與select的嵌套使用解決組合字段插入問題

    mysql中insert與select的嵌套使用解決組合字段插入問題

    本節主要介紹了mysql中insert與select的嵌套使用解決組合字段插入問題,需要的朋友可以參考下
    2014-07-07
  • MySQL 8.0新特性 — 檢查性約束的使用簡介

    MySQL 8.0新特性 — 檢查性約束的使用簡介

    這篇文章主要介紹了MySQL 8.0新特性 — 檢查性約束的簡單介紹,幫助大家更好的理解和學習使用MySQL數據庫,感興趣的朋友可以了解下
    2021-03-03
  • mysql數據校驗過程中的字符集問題處理

    mysql數據校驗過程中的字符集問題處理

    在日常應用中,我們經常會遇到在不同的字符集的數據庫直接進行數據的導入導出操作,針對這個問題,我們來進行討論下
    2014-05-05
  • Centos7 下Mysql5.7.19安裝教程詳解

    Centos7 下Mysql5.7.19安裝教程詳解

    這篇文章主要介紹了Centos7 下Mysql5.7.19安裝教程詳解,小編認為非常不錯,特此分享到腳本之家平臺,需要的朋友參考下吧
    2017-09-09
  • 解析如何加快mysql編譯的速度

    解析如何加快mysql編譯的速度

    本篇文章是對如何加快mysql編譯的速度進行了詳細的分析介紹,需要的朋友參考下
    2013-06-06
  • 5個保護MySQL數據倉庫的小技巧

    5個保護MySQL數據倉庫的小技巧

    這篇文章主要為大家詳細介紹了五個小技巧,告訴你如何保護MySQL數據倉庫,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • 安全地關閉MySQL服務的教程

    安全地關閉MySQL服務的教程

    這篇文章主要介紹了安全地關閉MySQL服務的教程,包括使用kill指令時的一些注意點,需要的朋友可以參考下
    2015-11-11

最新評論

免费人成视频在线观看