MySQL觸發(fā)器使用過(guò)程詳解
MySQL—觸發(fā)器
? 將兩個(gè)關(guān)聯(lián)的操作步驟寫(xiě)到程序里面,并且要用事務(wù)包裹起來(lái),確保兩個(gè)操作稱為一個(gè)原子操作,要么全部執(zhí)行,要么全部不執(zhí)行
? 創(chuàng)建一個(gè)觸發(fā)器,讓商品信息數(shù)據(jù)的插入操作自動(dòng)觸發(fā)庫(kù)存數(shù)據(jù)的插入操作
? 觸發(fā)器是由 事件來(lái)觸發(fā) 某個(gè)操作,這些事件包括 INSERT 、 UPDATE 、 DELETE 事件。所謂事件就是指用戶的動(dòng)作或者觸發(fā)某項(xiàng)行為。如果定義了觸發(fā)程序,當(dāng)數(shù)據(jù)庫(kù)執(zhí)行這些語(yǔ)句時(shí)候,就相當(dāng)于事件發(fā)生 了,就會(huì) 自動(dòng) 激發(fā)觸發(fā)器執(zhí)行相應(yīng)的操作。
創(chuàng)建觸發(fā)器
CREATE TRIGGER 觸發(fā)器名稱
{BEFORE|AFTER} {INSERT|UPDATE|DELETE} ON 表明
FOR EACH ROW
觸發(fā)器執(zhí)行語(yǔ)句
說(shuō)明:
表名 :表示觸發(fā)器監(jiān)控的對(duì)象。
BEFORE|AFTER :表示觸發(fā)的時(shí)間。BEFORE 表示在事件之前觸發(fā);AFTER 表示在事件之后觸發(fā)。
INSERT|UPDATE|DELETE :表示觸發(fā)的事件。
- INSERT 表示插入記錄時(shí)觸發(fā);
- UPDATE 表示更新記錄時(shí)觸發(fā);
- DELETE 表示刪除記錄時(shí)觸發(fā)。
觸發(fā)器執(zhí)行的語(yǔ)句塊 :可以是單條SQL語(yǔ)句,也可以是由BEGIN…END結(jié)構(gòu)組成的復(fù)合語(yǔ)句塊。
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 = '薪資不得高于領(lǐng)導(dǎo)薪資'; 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);
查看觸發(fā)器
查看當(dāng)前數(shù)據(jù)庫(kù)所有觸發(fā)器的定義
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 = '薪資不得高于領(lǐng)導(dǎo)薪資';
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
查看當(dāng)前數(shù)據(jù)庫(kù)中某個(gè)觸發(fā)器的定義
SHOW CREATE TRIGGER salary_check_trigger\G;
從系統(tǒng)庫(kù)information_schema的TRIGGERS表中查詢“salary_check_trigger”觸發(fā)器的信息。
SELECT * FROM information_schema.TRIGGERS\G;
刪除觸發(fā)器
DROP TRIGGER salary_check_trigger
觸發(fā)器優(yōu)缺點(diǎn)
優(yōu)點(diǎn):
- 可以確保數(shù)據(jù)的完整性
- 可以幫助記錄操作日志
- 可以用在操作數(shù)據(jù)前,對(duì)數(shù)據(jù)進(jìn)行合法性檢驗(yàn)
缺點(diǎn):
- 可讀性差
- ER salary_check_trigger
### 觸發(fā)器優(yōu)缺點(diǎn)
#### 優(yōu)點(diǎn):
- 可以確保數(shù)據(jù)的完整性
- 可以幫助記錄操作日志
- 可以用在操作數(shù)據(jù)前,對(duì)數(shù)據(jù)進(jìn)行合法性檢驗(yàn)#### 缺點(diǎn):
- 可讀性差
- 相關(guān)數(shù)據(jù)的變更,可能會(huì)導(dǎo)致觸發(fā)器錯(cuò)誤
到此這篇關(guān)于MySQL觸發(fā)器使用過(guò)程詳解的文章就介紹到這了,更多相關(guān)MySQL觸發(fā)器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
淺談Using filesort和Using temporary 為什么這么慢
本文主要介紹了Using filesort和Using temporary為什么這么慢,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02
mysql 鎖表鎖行語(yǔ)句分享(MySQL事務(wù)處理)
下面這個(gè)語(yǔ)句是鎖定一行數(shù)據(jù),開(kāi)始讀取,一直到刪除后都不會(huì)有第二個(gè)人也讀到這條數(shù)據(jù)2011-09-09
MySQL數(shù)據(jù)表基本操作實(shí)例詳解
這篇文章主要介紹了MySQL數(shù)據(jù)表基本操作,結(jié)合實(shí)例形式較為詳細(xì)的分析了MySQL針對(duì)數(shù)據(jù)表的基本創(chuàng)建、表結(jié)構(gòu)查看、修改、刪除等相關(guān)操作技巧,需要的朋友可以參考下2018-06-06
MySQL8.0窗口函數(shù)入門(mén)實(shí)踐及總結(jié)
這篇文章主要給大家介紹了關(guān)于MySQL8.0窗口函數(shù)入門(mén)實(shí)踐及總結(jié)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者使用MySQL8.0具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06
Ubuntu18.0.4下mysql 8.0.20 安裝配置方法圖文教程
這篇文章主要為大家詳細(xì)介紹了Ubuntu18.0.4下mysql 8.0.19 安裝配置方法圖文教程,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-05-05
mysql中GROUP_CONCAT函數(shù)使用技巧及問(wèn)題詳解
這篇文章主要給大家介紹了關(guān)于mysql中GROUP_CONCAT函數(shù)使用技巧及問(wèn)題的相關(guān)資料,GROUP_CONCAT是MySQL中的一個(gè)聚合函數(shù),它用于將多行數(shù)據(jù)按照指定的順序連接成一個(gè)字符串并返回結(jié)果,需要的朋友可以參考下2023-11-11

