mysql中的触发器入门

触发器的概念

触发器包括触发条件,触发操作,以及触发执行的时间。

触发器的用处

在增删改操作之前或者之后进行级联的数据操作,一发而触动全局,所以叫做触发器。使用触发器可以方便用户进行表之间的关联修改,不需要手动写行业务逻辑的层面的代码。

触发器的使用方法

基本语法

create trigger [after [before]] [insert [update [delete]] ]
on table_name for each [row [statement]]
<操作>
where(触发条件)<触发动作体>

例子1:学生表插入数据之后,在time表中插入当前时间

create trigger trig1 after insert 
on student for each row 
insert into time values(NOW());

例子2:使用begin …end语句进行多语句触发

DEIMITER $$
create trigger trig2 after insert 
on student each row 
begin
	insert into  time values(NOW());
	insert into operator person(;fff;);
end$$
DELIMITER ;

例子3:使用new 和old语句进行,new是插入或者修改之后的新的数据,可以被触发器直接引用得到,old是删除后的数据。

delimiter ##
create tirgger trig3 before insert
on student for each row
set NEW,changeTime = NOW();

注意
1.set应该是before触发器应有的权限。
2.不能使用update 或者insert 更改其中的数据的值否则会不断调用触发器从而造成死循环。

实例

#DROP TRIGGER delArticle
#删除文章的时候级联删除标签表和标签文章表
CREATE TRIGGER delArticle AFTER DELETE 
ON article FOR EACH ROW
BEGIN
 DELETE FROM `comment` WHERE article_id = OLD.id;#更新评论表
 SELECT tag_id FROM article_tag WHERE article_id = OLD.id INTO @tag_id;#先选出文章标签表中标签的id
 DELETE FROM article_tag WHERE article_id = OLD.id; #更新文章-标签表
 UPDATE tag SET tag.count = tag.count - 1 WHERE id = @tag_id; #更新标签表;
 DELETE FROM tag WHERE count = 0;											 			#如果标签数量为0就该删除了
END;
  1. 相关的错误

(1) 调用时候只有call + 名字

call login_test();
而不是 call proceduer login_test();

(2) 不能有两个into
就是不能是
select id into s_id, count(1) into state

(3)命名一定要专业!!!!!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值