MySQL触发器

触发器是个特殊的存储过程,不同的是,执行存储过程要用CALL语句来调用,但触发器是不需要CALL语句调用,也不用手动启动,只是当一个预定义的时间发生的时候,就会被MySQL自动调用。就像火警装置一样,一出现大火浓烟就会响起报警的声音,这个触发条件是火和浓烟。

创建触发器的执行语句是:

create  trigger  触发器名字  触发器的时间  触发的事件  on  建立触发器的表名  for each row  触发器的执行语句;

其中触发器的时间包括before或after;触发事件包括insert,update,delete

1、在表上建立一个触发器

######创建一个表######
create table a(sno int,id int);

######创建一个名为a_trg的触发器,在插入数据的时候求出总和######
create trigger a_trg before insert on a for each row set @sum = @sum + new.id;

######初始化sum变量为0######
set @sum = 0;

######向a表中插入数据######
insert into a values(1,001),(2,002),(3,003);

######查询######
select @sum;
+------+
| @sum |
+------+
|    6 |
+------+

2、在表上建立多个触发器

######创建a1表######
create table a1(v1 int);  

######创建a2表######
create table a2(v2 int);

######创建a3表######
create table a3(v3 int not null auto_increment primary key);

######创建a4表######
create table a4(v4 int not null auto_increment primary key,
    -> w4 int default 0
    -> );

######修改SQL语句的结束符为//(默认为;)
delimiter //

######创建一个名为a_trigger的触发器######
create trigger a_trigger before insert on a1
    -> for each row
    -> begin                   ######开始执行语句######
    -> insert into a2 set v2 = new.v1;    ######将a1表里新插入的数据插入到a2表里
    -> delete from a3 where v3 = new.v1;  ######删除a3表里的和a1表新插入数据一样的数据######
    -> update a4 set w4 = w4 + 1 where v4 = new.v1;######把a4表里的跟a1一样的数据都加1######
    -> end    ######结束######
    -> //     ######这个触发器的SQL语句结束######

delimiter ;    ######修改SQL结束语句为;######
######给下面各个表插入数据,a1表的数据最后插入,以便启动触发器######
insert into a3 values(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL);

insert into a4(v4) values(0),(0),(0),(0),(0),(0),(0),(0),(0),(0);

insert into a1 values(1),(3),(1),(4),(5),(2),(0),(0);

查询4个表的数据 

MariaDB [wen]> select * from a1;
+------+
| v1   |
+------+
|    1 |
|    3 |
|    1 |
|    4 |
|    5 |
|    2 |
|    0 |
|    0 |
+------+
8 rows in set (0.00 sec)

MariaDB [wen]> select * from a2;
+------+
| v2   |
+------+
|    1 |
|    3 |
|    1 |
|    4 |
|    5 |
|    2 |
|    0 |
|    0 |
+------+
8 rows in set (0.00 sec)

MariaDB [wen]> select * from a3;
+----+
| v3 |
+----+
|  6 |
|  7 |
|  8 |
|  9 |
| 10 |
+----+
5 rows in set (0.00 sec)

MariaDB [wen]> select * from a4;
+----+------+
| v4 | w4   |
+----+------+
|  1 |    2 |
|  2 |    1 |
|  3 |    1 |
|  4 |    1 |
|  5 |    1 |
|  6 |    0 |
|  7 |    0 |
|  8 |    0 |
|  9 |    0 |
| 10 |    0 |
+----+------+
10 rows in set (0.00 sec)

3、查看触发器

show triggers \G

select * from information_schema.triggers \G

4、删除触发器(DROP  TRIGGER  触发器的名字

drop trigger a_trigger;

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值