在mysql中,觸發器是儲存在資料庫目錄中的一組SQL語句,每當與資料表相關聯的事件發生時,即執行或觸發觸發器,例如插入、更新或刪除。觸發器與資料表關係密切,主要用於保護表中的資料;特別是當有多個表具有一定的相互聯繫的時候,觸發器能夠讓不同的表保持資料的一致性。在MySQL中,只有執行INSERT、UPDATE和DELETE操作時才能啟動觸發器,其它SQL語句則不會啟動觸發器。
本教學操作環境:windows7系統、mysql8版本、Dell G3電腦。
mysql中的觸發器
在mysql中,觸發器是儲存在資料庫目錄中的一組SQL語句,每當與表相關聯的事件發生時,即會執行或觸發觸發器,例如插入、更新或刪除。
MySQL 的觸發器和預存程序一樣,都是嵌入到 MySQL 中的一段程序,是 MySQL 中管理資料的有力工具。不同的是執行預存程序要使用 CALL 語句來調用,而觸發器的執行不需要使用 CALL 語句來調用,也不需要手動啟動,而是透過對資料表的相關操作來觸發、啟動從而實現執行。例如當對 student 表進行操作(INSERT,DELETE 或 UPDATE)時就會啟動它執行。
觸發器與資料表關係密切,主要用於保護表中的資料。特別是當有多個表具有一定的相互聯繫的時候,觸發器能夠讓不同的表保持資料的一致性。
在 MySQL 中,只有執行 INSERT、UPDATE 和 DELETE 作業時才能啟動觸發器,其它 SQL 語句則不會啟動觸發器。
那為什麼要使用觸發器呢?例如,在實際開發專案時,我們經常會遇到以下情況:
在學生表中新增一條關於學生的記錄時,學生的總數就必須同時改變。
增加一筆學生記錄時,需要檢查年齡是否符合範圍要求。
刪除一則學生資料時,需要刪除其成績表上的對應記錄。
刪除一筆資料時,需要在資料庫存檔表中保留備份副本。
雖然上述情況實作的業務邏輯不同,但是它們都需要在資料表發生變更時,自動進行一些處理。這時就可以使用觸發器來處理。例如,對於第一種情況,可以建立一個觸發器對象,每當添加一條學生記錄時,就執行一次計算學生總數的操作,這樣就可以保證每次添加一條學生記錄後,學生總數和學生記錄數是一致的。
MySQL 支援的觸發器
在實際使用中,MySQL 所支援的觸發器有三種:INSERT 觸發器、UPDATE 觸發器和 DELETE 觸發器。
1) INSERT 觸發器
在 INSERT 語句執行之前或之後回應的觸發器。
使用INSERT 觸發器需要注意以下幾點:
在INSERT 觸發器程式碼內,可引用一個名為NEW(不區分大小寫)的虛擬表來存取被插入的行。
在 BEFORE INSERT 觸發器中,NEW 中的值也可以更新,也就是允許變更插入的值(只要有對應的操作權限)。
對於 AUTO_INCREMENT 列,NEW 在 INSERT 執行之前包含的值是 0,在 INSERT 執行之後會包含新的自動產生值。
2) UPDATE 觸發器
#在 UPDATE 語句執行之前或之後回應的觸發器。
使用UPDATE 觸發器需要注意以下幾點:
在UPDATE 觸發器程式碼內,可引用一個名為NEW(不區分大小寫)的虛擬表來存取更新的值。
在 UPDATE 觸發器程式碼內,可引用一個名為 OLD(不區分大小寫)的虛擬表來存取 UPDATE 語句執行前的值。
在 BEFORE UPDATE 觸發器中,NEW 中的值可能也會更新,也就是允許變更將要用於 UPDATE 語句中的值(只要有對應的操作權限)。
OLD 中的值全部都是唯讀的,不能更新。
注意:當觸發器設計對觸發表本身的更新操作時,只能使用 BEFORE 類型的觸發器,AFTER 類型的觸發器將不被允許。
3) DELETE 觸發器
在 DELETE 語句執行之前或之後回應的觸發器。
使用DELETE 觸發器需要注意以下幾點:
在DELETE 觸發器程式碼內,可以引用一個名為OLD(不區分大小寫)的虛擬表來存取被刪除的行。
OLD 中的值全部都是唯讀的,不能更新。
整體來說,觸發器使用的過程中,MySQL 會以以下方式處理錯誤。
對於事務性表,如果觸發程序失敗,以及由此導致的整個語句失敗,那麼該語句所執行的所有更改將回滾;對於非事務性表,則不能執行此類回滾,即使語句失敗,失敗之前所做的任何更改仍然有效。
若 BEFORE 觸發程式失敗,則 MySQL 將不執行對應行上的動作。
若在 BEFORE 或 AFTER 觸發程式的執行過程中出現錯誤,則會導致呼叫觸發程式的整個語句失敗。
僅當 BEFORE 觸發程序和行操作都已成功執行,MySQL 才會執行 AFTER 觸發程序。
【相關推薦:mysql影片教學】
#以上是mysql中觸發器是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了关于架构原理的相关内容,MySQL Server架构自顶向下大致可以分网络连接层、服务层、存储引擎层和系统文件层,下面一起来看一下,希望对大家有帮助。

在mysql中,可以利用char()和REPLACE()函数来替换换行符;REPLACE()函数可以用新字符串替换列中的换行符,而换行符可使用“char(13)”来表示,语法为“replace(字段名,char(13),'新字符串') ”。

mysql的msi与zip版本的区别:1、zip包含的安装程序是一种主动安装,而msi包含的是被installer所用的安装文件以提交请求的方式安装;2、zip是一种数据压缩和文档存储的文件格式,msi是微软格式的安装包。

方法:1、利用right函数,语法为“update 表名 set 指定字段 = right(指定字段, length(指定字段)-1)...”;2、利用substring函数,语法为“select substring(指定字段,2)..”。

转换方法:1、利用cast函数,语法“select * from 表名 order by cast(字段名 as SIGNED)”;2、利用“select * from 表名 order by CONVERT(字段名,SIGNED)”语句。

本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了关于MySQL复制技术的相关问题,包括了异步复制、半同步复制等等内容,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了mysql高级篇的一些问题,包括了索引是什么、索引底层实现等等问题,下面一起来看一下,希望对大家有帮助。

在mysql中,可以利用REGEXP运算符判断数据是否是数字类型,语法为“String REGEXP '[^0-9.]'”;该运算符是正则表达式的缩写,若数据字符中含有数字时,返回的结果是true,反之返回的结果是false。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

Atom編輯器mac版下載
最受歡迎的的開源編輯器

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境