發(fā)布于:2021-01-23 00:00:52
0
119
0
和我一樣,您也是MySQL用戶。恭喜,您已經(jīng)選擇了世界上最好,最受歡迎的開源數(shù)據(jù)庫。現(xiàn)在,無需擔心您的編程語言或框架,因為MySQL為應(yīng)用程序開發(fā)人員提供了構(gòu)建數(shù)據(jù)庫驅(qū)動的信息系統(tǒng)所需的一切。今天,我將討論MySQL觸發(fā)器的全面知識,也稱為SQL觸發(fā)器。如果您精通技術(shù),并且想要獲取有關(guān)MySQL觸發(fā)器的詳細信息,那么可以閱讀本文。
什么是MySQL觸發(fā)器?
MySQL觸發(fā)器是對關(guān)聯(lián)的數(shù)據(jù)庫表執(zhí)行已定義的操作(例如INSERT,UPDATE或DELETE)時自動調(diào)用的數(shù)據(jù)庫對象或存儲程序。因此,如果要在MySQL上運行數(shù)據(jù)庫觸發(fā)器,則需要SUPERUSER特權(quán)。如果將網(wǎng)站托管在共享托管環(huán)境中,則不能運行任何觸發(fā)器MySQL。
最好有一個VPS(虛擬專用服務(wù)器)或?qū)S梅?wù)器來獲得SUPERUSER權(quán)限,以便在MySQL中運行觸發(fā)器。
主要有兩種類型的SQL觸發(fā)器:行級觸發(fā)器和語句級觸發(fā)器。
行級觸發(fā)器:每當您需要為每行插入,更新或刪除事件時,都將激活或執(zhí)行該觸發(fā)器。例如,如果要刪除50行,則應(yīng)為受影響的50行自動調(diào)用數(shù)據(jù)庫觸發(fā)器50次。
語句級觸發(fā)器:顧名思義,它對每個數(shù)據(jù)庫事務(wù)執(zhí)行一次,而不是更新,刪除或插入多少行。
MySQL不支持語句級SQL觸發(fā)器,而僅執(zhí)行行級觸發(fā)器。
如何創(chuàng)建MySQL觸發(fā)器?
CREATE TRIGGER [schema_name.]trigger_name ON table_name {FOR | AFTER | INSTEAD OF} {[INSERT] [,] [UPDATE] [,] [DELETE]} AS {sql_statements}
您要做的是?定義觸發(fā)觸發(fā)器時要執(zhí)行的一組SQL語句?,F(xiàn)在指定觸發(fā)器何時執(zhí)行,并由{FOR | 之后| INSTEAD OF}部分。INSERT,UPDATE,DELETE選項表示哪些SQL命令觸發(fā)該觸發(fā)器。
如果要刪除或刪除MySQL觸發(fā)器,請運行以下命令:
DROP TRIGGER [schema_name.]trigger_name;
MySQL觸發(fā)器示例:
打開SSH并創(chuàng)建一個數(shù)據(jù)庫表,以便我們可以對其執(zhí)行觸發(fā)器:
mysql> CREATE TABLE student (age INT, name varchar(150));
現(xiàn)在,定義一個觸發(fā)器,該觸發(fā)器將在學(xué)生表的每個插入語句之前執(zhí)行:
mysql> delimiter // mysql> CREATE TRIGGER agecheck BEFORE INSERT ON student FOR EACH ROW IF NEW.age < 0 THEN SET NEW.age = 0; END IF;// Query OK, 0 rows affected (0.00 sec) mysql> delimiter ;
插入三個記錄,以確認觸發(fā)器功能:
mysql> INSERT INTO student VALUES (-10, 'david'), (20, 'sara'), (30, 'viktor');
這是輸出:
mysql> SELECT * FROM student;
+——-+——-+ | age | name | +——-+——-+ | 0 | David | | 20 | Sara | | 30 | Viktor | +——-+——-+