MySQL触发器基本概念和创建(含实例)

触发器的定义:

触发器与编程语言的函数类似,都需要声明、执行等。但是触发器的执行并不是由程序执行的,也不是用户调用的,而是在特定的时候触发。

三种常见的触发方式:insert、uodate、delete,即在插入数据时触发,在更改数据时触发,在删除数据时触发

定义触发器使用trigger关键字

触发器的语法:

(红色为固定写法)

CREATE TRIGGER trigger_name

trigger_time

trigger_event ON tbl_name

FOR EACH ROW

BEGIN

……

END

解析:trigger_name:触发器的名字,类似于函数的名字

trigger_time:触发器触发的时机(可选参数:before,after),after表示先执行SQL语句再执行触发器触发的事件,befo相反

trigger_event:触发器的触发事件(三个常用参数:insert、uodate、delete)

tbl_name:触发器要加入到哪张表

BEGIN和END之间写SQL语句,当触发事件发生时,执行其中的SQL语句

 

实例:使用触发器,当在a1表中插入数据时,a2表也插入相同的数据(前提:a1,a2表的结构相同)

创建表a1和a2,结构如下:

mysql> create table a1(id int,num int);
Query OK, 0 rows affected (0.03 sec)

mysql> create table a2(id int,num int);
Query OK, 0 rows affected (0.03 sec)

mysql> show columns from a1;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| id    | int(11) | YES  |     | NULL    |       |
| num   | int(11) | YES  |     | NULL    |       |
+-------+---------+------+-----+---------+-------+
2 rows in set (0.00 sec)

mysql> show columns from a2;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| id    | int(11) | YES  |     | NULL    |       |
| num   | int(11) | YES  |     | NULL    |       |
+-------+---------+------+-----+---------+-------+
2 rows in set (0.00 sec)

创建insert触发器a_insert:

mysql> delimiter !!    #将语句的结束符号从分号;临时改为两个!!(可以是自定义)
mysql> create trigger a_insert after
    -> insert on a1
    -> for each row
    -> begin
    -> insert into a2 set id = new.id,num = new.num;
    -> end!!
Query OK, 0 rows affected (0.01 sec)

mysql> delimiter ;    #将语句的结束符号恢复为分号

解析:我们创建了一个a_insert触发器,在SQL语句执行完后执行,当在a1中执行插入操作,同时也将数据插入到a2中,我们在定义过程时,使用DELIMITER,使得过程体中使用的分号被直接传递到服务器,而不会被客户端(如mysql)解释(内容中的分号必须要)。

创建测试代码:

mysql> insert into a1(id,num)values(1,4);
Query OK, 1 row affected (0.00 sec)

mysql> select * from a1;
+------+------+
| id   | num  |
+------+------+
|    1 |    4 |
+------+------+
1 row in set (0.00 sec)

mysql> select * from a2;
+------+------+
| id   | num  |
+------+------+
|    1 |    4 |
+------+------+
1 row in set (0.00 sec)

解析:当我们在a1中插入数据的时候,触发了触发器,让a2也得到了数据

查看触发器:

语法:SHOW TRIGGERS FROM [库名]

将查出来整个库下面的所有触发器:

show triggers from text(我的a1和a2表放在text库中)

删除触发器:

语法:DROP TRIGGER [库名].[触发器名称]

DROP TRIGGER text.a_insert;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值