MYSQL中禁用/啟動觸發器


在使用MYSQL過程中,經常會使用到觸發器,但是有時使用不當會造成一些麻煩。有沒有一種辦法可以控制觸發器的調用呢?
觸發器顧名思義就是數據庫在一定的調條件自動調用的SQL語句,觸發器拒絕了人工調用的過程,由數據庫MYSQL數據庫自動的調用,執行更加高效。
如何禁用觸發器呢?

1.新建兩張表:

表demo_1:

CREATE TABLE `demo_1` ( `ID` int(11) NOT NULL AUTO_INCREMENT COMMENT '主鍵', `STUNAME` varchar(32) DEFAULT NULL COMMENT '名字', `AGE` tinyint(4) DEFAULT NULL COMMENT '年齡', PRIMARY KEY (`ID`) ) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8;

表:demo_2

CREATE TABLE `demo_2` ( `ID` int(11) NOT NULL AUTO_INCREMENT COMMENT '主鍵', `STU_ID` int(11) DEFAULT NULL COMMENT '學生編號', `MATH` double DEFAULT NULL COMMENT '成績', PRIMARY KEY (`ID`) ) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;

2.然后給demo_1創建一個觸發器

DROP TRIGGER IF EXISTS `insertTragger`; DELIMITER ;; CREATE TRIGGER `insertTragger` AFTER INSERT ON `demo_1` FOR EACH ROW begin select ID INTO @v1 from demo_1 order by ID desc limit 1; Insert into demo_2(STU_ID, MATH) values(@v1, 98.5); end ;; DELIMITER ;

3.觸發器是:在demo_1中添加一條數據時,demo_2中自動添加一條數據。

4.但是我不想每次出入數據都觸發觸發器呢,只有在我想觸發的時候才觸發。

重新編寫觸發器:

DROP TRIGGER IF EXISTS `insertTragger`; DELIMITER ;; CREATE TRIGGER `insertTragger` AFTER INSERT ON `demo_1` FOR EACH ROW begin if @enable_trigger = 1 then select ID INTO @v1 from demo_1 order by ID desc limit 1; Insert into demo_2(STU_ID, MATH) values(@v1, 98.5); end if; end ;; DELIMITER ;

5.調用觸發器

SET @enable_trigger = 1;
INSERT INTO demo_1(STUNAME , AGE) VALUES(‘小強’, 17);
執行之后,表demo_1中增加一條數據
2 小強 17
表demo_2中同樣也增加一條數據
2 2 98.5

6.禁用觸法器

SET @enable_trigger = 0;
INSERT INTO demo_1(STUNAME , AGE) VALUES(‘小強’, 17);
執行之后:
執行之后,表demo_1中增加一條數據
2 小強 17
表demo_2中沒有增加任何數據

以上就解決了觸發器的靈活調用。

come from:https://blog.csdn.net/wb175208/article/details/81480983


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM