关于Mysql 触发器常用操作

17 篇文章 0 订阅
4 篇文章 0 订阅
基本语法:

CREATE TRIGGER 自定义名称
触发时机  触发事件 ON 触发事件所在的表名
FOR EACH ROW
触发需要执行的逻辑;

创建触发器

CREATE TRIGGER tr_seq1 
AFTER INSERT on table1
FOR EACH ROW
BEGIN
DECLARE cn INTEGER;
SELECT COUNT(galary_id) INTO cn from table2;
IF cn!=0 THEN
UPDATE table2 set table2.num=table2.num+2;
ELSE
INSERT INTO table1 VALUES(1,1,1);
END IF;
END;

上边内容解释如下:
使用符号分割,标示位于中间的内容为一个整体,而不是单单用分号分割;
创建一个名称是tr_seq1的触发器;
触发器触发事件是,向table2插入数据只好触发;
对每一行都生效;
开始具体逻辑;
声明一个变量cn,类型是INTEGER;
查询table1的数据数量,并赋值给变量cn;
判断变量cn的值是否不等于0;
符合上边的条件,则更新数据库中num的值,在原基础加2;
否则;
向table1中插入一条数据;
具体逻辑结束
分隔符结尾;
分割符声明结尾。

 

其中,触发器名参数指要创建的触发器的名字

BEFORE和AFTER参数指定了触发执行的时间,在事件之前或是之后

FOR EACH ROW表示任何一条记录上的操作满足触发事件都会触发该触发器

 

查询触发器:

如果要查询test库中已有的触发器,就可以这样写:

SHOW TRIGGERS FROM database

尤其注意,是库名,不是表名。

 

如果只要查询某个触发器的详细情况,可以用类似下边的查询语句:

SHOW CREATE TRIGGER  tr_seq1
  

删除触发器:

如果触发器失效了,为了减少资源消耗,可能需要进行删除

DROP TRIGGER 触发器名称;

而一般用的比较多的,是在删除前先进行一个判断,判断是否存在,那么就成了下边这样:

DROP TRIGGER IF EXISTS 触发器名称;

如果需要一张表中创建多个触发器,并在执行时,按指定顺序触发。

要更改触发器的顺序,需要在FOR EACH ROW子句之后指定FOLLOWSPRECEDES。我们来看下这两个词的说明:

FOLLOWS允许新触发器在现有触发器之后进行

PRECEDES 允许新触发器在现有触发器之前进行

语法:

DELIMITER $$
CREATE TRIGGER  trigger_name
[BEFORE|AFTER] [INSERT|UPDATE|DELETE] ON table_name
FOR EACH ROW [FOLLOWS|PRECEDES] existing_trigger_name
BEGIN

END$$

 

不足之处,欢迎吐槽!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值