在使用mysql過程中,經常會使用到觸發器,但是有時使用不當會造成一些麻煩。有沒有一種辦法可以控制觸發器的呼叫呢?
觸發器顧名思義就是資料庫在一定的調條件自動呼叫的sql語句,觸發器拒絕了人工呼叫的過程,由資料庫mysql資料庫自動的呼叫,執行更加高效。
如何禁用觸發器呢?
表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;
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 ;
重新編寫觸發器:
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 ;
set @enable_trigger = 1;
insert into demo_1(stuname , age) values(『小強』, 17);
執行之後,表demo_1中增加一條資料
2 小強 17
表demo_2中同樣也增加一條資料
2 2 98.5
set @enable_trigger = 0;
insert into demo_1(stuname , age) values(『小強』, 17);
執行之後:
執行之後,表demo_1中增加一條資料
2 小強 17
表demo_2中沒有增加任何資料
以上就解決了觸發器的靈活呼叫。
come from:
MYSQL中禁用 啟動觸發器
在使用mysql過程中,經常會使用到觸發器,但是有時使用不當會造成一些麻煩。有沒有一種辦法可以控制觸發器的呼叫呢?觸發器顧名思義就是資料庫在一定的調條件自動呼叫的sql語句,觸發器拒絕了人工呼叫的過程,由資料庫mysql資料庫自動的呼叫,執行更加高效。如何禁用觸發器呢?表demo 1 create ...
觸發器 mysql觸發器
觸發器是一種特殊的儲存過程,它在插入 刪除或修改特定表中的資料時觸發執行,它比資料庫本身標準的功能有更精細和更複雜的資料控制能力。和儲存過程一樣,很少使用。1 觸發器的作用 2 建立觸發器 建立測試環境 mysql create database test db query ok,1 row aff...
MySQL中觸發器
觸發器是與某個事件相關的特殊儲存過程,與儲存過程不同的是,儲存過程需要用 call 呼叫而出發器不需要使用call呼叫呼叫。也就是自己預先定義好了,當某個事件發生時,就會自動出發觸發器進行相關的操作。僅對 insert update delete 有效,對select無。trigger name 觸...