mysql触发器
2015-09-02 18:33
585 查看
~~语法~~
CREATE TRIGGER <触发器名称> --触发器必须有名字,最多64个字符,可能后面会附有分隔符.它和MySQL中其他对象的命名方式基本相象.
{ BEFORE | AFTER } --触发器有执行的时间设置:可以设置为事件发生前或后。
{ INSERT | UPDATE | DELETE } --同样也能设定触发的事件:它们可以在执行insert、update或delete的过程中触发。
insert 使用 new.cloumn
delete 使用 old.cloumn
update 使用 new||old
ON <表名称> --触发器是属于某一个表的:当在这个表上执行插入、 更新或删除操作的时候就导致触发器的激活. 我们不能给同一张表的同一个事件安排两个触发器。
FOR EACH ROW --触发器的执行间隔:FOR EACH ROW子句通知触发器 每隔一行执行一次动作,而不是对整个表执行一次。
<触发器SQL语句> --触发器包含所要触发的SQL语句:这里的语句可以是任何合法的语句, 包括复合语句,但是这里的语句受的限制和函数的一样。
--你必须拥有相当大的权限才能创建触发器(CREATE TRIGGER),如果你已经是Root用户,那么就足够了。这跟SQL的标准有所不同。
delimiter 定义分隔符 告诉MySQL解释器,该段命令是否已经结束了,是否可以执行。
实例:
id || fans || idol //用户表 A //用户 粉丝数 偶像数
id || idol_id //关系表 B //a用户ID a用户关注偶像ID
功能:当我们在关系表B插入一条数据时,用户表会自动更新粉丝数和偶像数
drop trigger if exists t_B_afterinsert; drop trigger if exists t_B_afterdelete; delimiter | create trigger t_B_afterinsert after insert on B for each row begin update A set idol = idol +1 where A.UUID = NEW.id ; update A set fans = fans +1 where A.UUID = NEW.idol_id; end| create trigger t_B_afterdelete after delete on B for each row begin update A set idol = idol -1 where A.id = OLD.id ; update A set fans = fans-1 where A.id = OLD.idol_id; end| delimiter ;
if的使用:
IF condition THEN
sql;
ELSEIF
sql;
ELSE
sql;
END IF;
实例:
表A,B分别代表不同类型的内容,例如微博的feed和article。这时我增加一个新表C记录需要所有的评论,我需要在插入和删除表C时都能更新表A或表B的记数。
表A id || collect ||
表B id || collect
表C id || type || res_id //type=1 为表A评论 2为表B评论
drop trigger if exists t_C_afterinsert; drop trigger if exists t_C_afterdelete; delimiter | create trigger t_C_afterinsert after insert on C for each row begin if 2 = NEW.type then update B set collect= collect +1 where B.id = NEW.res_id ; elseif 1= NEW.type then update A set collect = collect +1 where A.id = NEW.res_id; end if; end| create trigger t_Ccollections_afterdelete after delete on C for each row begin if 2=OLD.type then update B set collect= collect -1 where B.id = OLD.res_id ; elseif 1 = OLD.type then update A set collect = collect -1 where A.id = OLD.res_id; end if; end| delimiter ;
相关文章推荐
- mysql函数
- MySQL CHAR VARCHAR 字段长度
- MySQL 5.6 源码目录结构
- Mysql的存储引擎之:MERGE存储引擎
- MySql开启远程访问
- santoku系统安装mysql数据库并进行建表
- mysql-concat扩展函数
- mysql root 忘记密码
- Mysql 创建查询用户
- hibernate.cfg.xml配置mysql数据库信息
- mysql 关于对时间字段的查询
- mysql 获取刚插入行的id
- mysql定时任务
- Windows下mysql忘记root密码的解决方法
- mysql数据库千万级别数据的查询优化和分页测试
- 通过配置Mysql参数提高写入速度(整理)
- mysql cluster管理节点配置详解
- 理解MySQL——索引与优化
- Mysql数据库主从搭建
- 安装完MySQL数据库,在服务列表里找不到MySQL的解决办法