我是靠谱客的博主 英勇草莓,最近开发中收集的这篇文章主要介绍mysql 触发器语法,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1、什么是触发器(trigger)

通俗来说:比如有个规则,我学习你就要去玩,这时候就可以把这个规则写成触发器,当我一学习你就自动去玩耍了。在mysql里就是,比如规则是我在表1插入一条数据,表2也自动插入这条数据,这时候就可以把这个规则写进触发器,当我在表1插入数据时,“自动”执行表2插入该条数据。当然,不仅是insert,增(insert)删(delete)改(update)都能设置触发器。

2、定义触发器

语法(单条触发语句):
create trigger 触发器名 before/after 事件 on 表名
for each row
触发器语句;

定义触发器注意事项:
1、触发器名建议为trigger_xxx,这样便于区分,触发器名不能重复。
2、before|after 代表触发器语句执行时间,如果是before,就是在insert|delete|update操作之前执行触发器语句;after就是之后。
3、事件就是insert delete update操作中的一个。
4、 for each row 是代表任何记录执行对应操作都会触发器。
5、触发器语句就是触发器触发时要执行的语句。

从定义触发器中我们发现:一张表最大能有6个触发器(32:增删改三种操作两种时间(before/after))

例如:有两张表,account表和account-history表,每次更新账户表account时,就把变更记录插入历史表account-history,这也合乎事实,每次账户花钱或者来钱,都在账户历史表上新增一条变更记录。
创建触发器:

CREATE TRIGGER trig_account_his AFTER UPDATE ON account
FOR EACH ROW
INSERT INTO account_history(account_name,changed_cash) VALUES(new.name,new.cash-old.cash);

测试:

UPDATE account SET cash=cash+10000 WHERE NAME="cust";

语法(多条触发语句):
delimiter@@
create trigger 触发器名 before/after insert/update/delete on 表名
for each row
begin
触发语句1;触发语句2;…触发语句n;
end@@;
delimiter ;

为啥要用delimiter@@?
在MySQL中分号(;)默认是语句结束符,而多条触发语句之间使用分号(;)显然是会出问题的,所以在命令行使用多个触发语句时应当先修改语句结束符为@@,当然这个是自己选择的,也可以设置为$$,在最后用完之后再将语句结束符修改为分号(;)。

3、MySQL查看触发器

1、show triggers:查看所有的触发器
2、select * from triggers:在information_schema中查看triggers表
ps:加where条件进行条件查询
3、show create trigger触发器名:查看触发器的创建语句
4、drop trigger 触发器名:删除触发器

4、MySQL触发器中的新旧记录

insert:新增记录,没有旧记录;
delete:删除旧记录,没有新记录;
update:有变更后的新纪录,也有被变更的旧记录

我们可以用old | new来引用这些记录
在for each row 后的触发语句中使用,如下:

for each row
insert into 记录表 values(old.xxx,new.yyy)

最后

以上就是英勇草莓为你收集整理的mysql 触发器语法的全部内容,希望文章能够帮你解决mysql 触发器语法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(52)

评论列表共有 0 条评论

立即
投稿
返回
顶部