概述
触发器的概念
触发器包括触发条件,触发操作,以及触发执行的时间。
触发器的用处
在增删改操作之前或者之后进行级联的数据操作,一发而触动全局,所以叫做触发器。使用触发器可以方便用户进行表之间的关联修改,不需要手动写行业务逻辑的层面的代码。
触发器的使用方法
基本语法
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) 调用时候只有call + 名字
call login_test();
而不是 call proceduer login_test();
(2) 不能有两个into
就是不能是
select id into s_id, count(1) into state
(3)命名一定要专业!!!!!
最后
以上就是淡淡期待为你收集整理的mysql中的触发器入门的全部内容,希望文章能够帮你解决mysql中的触发器入门所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复