在使用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中沒有增加任何數據
以上就解決了觸發器的靈活調用。
總結
以上所述是小編給大家介紹的Mysql中禁用與啟動觸發器教程,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!
您可能感興趣的文章:- mysql 觸發器語法與應用示例
- MySql視圖觸發器存儲過程詳解
- mysql觸發器原理與用法實例分析
- mysql日志觸發器實現代碼
- mysql觸發器之觸發器的增刪改查操作示例
- mysql觸發器之創建多個觸發器操作實例分析
- mysql觸發器之創建使用觸發器簡單示例
- mysql觸發器簡介、創建觸發器及使用限制分析
- MySQL 觸發器定義與用法簡單實例
- MySQL觸發器概念、原理與用法詳解
- 詳解MySQL數據庫之觸發器