您好,登錄后才能下訂單哦!
本文小編為大家詳細介紹“MySQL觸發器如何使用”,內容詳細,步驟清晰,細節處理妥當,希望這篇“MySQL觸發器如何使用”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。
將兩個關聯的操作步驟寫到程序里面,并且要用事務包裹起來,確保兩個操作稱為一個原子操作,要么全部執行,要么全部不執行
創建一個觸發器,讓商品信息數據的插入操作自動觸發庫存數據的插入操作
觸發器是由 事件來觸發 某個操作,這些事件包括 INSERT 、 UPDATE 、 DELETE 事件。所謂事件就是指用戶的動作或者觸發某項行為。如果定義了觸發程序,當數據庫執行這些語句時候,就相當于事件發生 了,就會 自動 激發觸發器執行相應的操作。
CREATE TRIGGER 觸發器名稱
{BEFORE|AFTER} {INSERT|UPDATE|DELETE} ON 表明
FOR EACH ROW
觸發器執行語句
說明:
表名 :表示觸發器監控的對象。
BEFORE|AFTER :表示觸發的時間。BEFORE 表示在事件之前觸發;AFTER 表示在事件之后觸發。
INSERT|UPDATE|DELETE :表示觸發的事件。
INSERT 表示插入記錄時觸發;
UPDATE 表示更新記錄時觸發;
DELETE 表示刪除記錄時觸發。
觸發器執行的語句塊 :可以是單條SQL語句,也可以是由BEGIN…END結構組成的復合語句塊。
DELIMITER // CREATE TRIGGER before_insert_test_tri BEFORE INSERT ON test_trigger FOR EACH ROW BEGIN INSERT INTO test_trigger_log(t_node) VALUES('before insert'); END // DELIMITER ; INSERT INTO test_trigger(t_node) VALUES('test..'); SELECT * FROM test_trigger; SELECT * FROM test_trigger_log;
DELIMITER // CREATE TRIGGER salary_check_trigger BEFORE INSERT ON emp FOR EACH ROW BEGIN DECLARE mgr_sal DOUBLE; SELECT salary INTO mgr_sal FROM emp WHERE employee_id = NEW.manager_id; IF NEW.salary > mgr_sal THEN SIGNAL SQLSTATE 'HY000' SET MESSAGE_TEXT = '薪資不得高于領導薪資'; END IF; END // DELIMITER ; DESC emp; INSERT INTO emp(employee_id,last_name,email,hire_date,job_id,salary,manager_id) VALUES(300,'test','tom@126.com',CURDATE(),'AD_VP',10000,103);
查看當前數據庫所有觸發器的定義
mysql> SHOW TRIGGERS\G; *************************** 1. row *************************** Trigger: salary_check_trigger Event: INSERT Table: emp Statement: BEGIN DECLARE mgr_sal DOUBLE; SELECT salary INTO mgr_sal FROM emp WHERE employee_id = NEW.manager_id; IF NEW.salary > mgr_sal THEN SIGNAL SQLSTATE 'HY000' SET MESSAGE_TEXT = '薪資不得高于領導薪資'; END IF; END Timing: BEFORE Created: 2023-02-28 15:46:44.71 sql_mode: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION Definer: root@% character_set_client: utf8 collation_connection: utf8_general_ci Database Collation: utf8_general_ci
查看當前數據庫中某個觸發器的定義
SHOW CREATE TRIGGER salary_check_trigger\G;
從系統庫information_schema的TRIGGERS表中查詢“salary_check_trigger”觸發器的信息。
SELECT * FROM information_schema.TRIGGERS\G;
DROP TRIGGER salary_check_trigger
優點:
可以確保數據的完整性
可以幫助記錄操作日志
可以用在操作數據前,對數據進行合法性檢驗
缺點:
可讀性差
ER salary_check_trigger
### 觸發器優缺點
#### 優點:
- 可以確保數據的完整性
- 可以幫助記錄操作日志
- 可以用在操作數據前,對數據進行合法性檢驗#### 缺點:
- 可讀性差
- 相關數據的變更,可能會導致觸發器錯誤
讀到這里,這篇“MySQL觸發器如何使用”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。