欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Mysql中禁用与启动触发器教程【推荐】

程序员文章站 2023-10-17 23:00:09
在使用mysql过程中,经常会使用到触发器,但是有时使用不当会造成一些麻烦。有没有一种办法可以控制触发器的调用呢? 触发器顾名思义就是数据库在一定的调条件自动调用的sql...

在使用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中禁用与启动触发器教程,希望对大家有所帮助