mysql 触发器
监听数据进行操作: 有点类似于js的事件。在当前表上,设置一个对每行数据的一个监听器,监听相关事件每当事件发生时,会执行一段由SQL完成的一段功能代码。
触发器的元素:
事件和发生时间时执行的代码。
触发器的创建:
Create trigger 名字 事件 执行性代码。
触发器的事件分为:
插入 insert 删除 delete 修改 update 事件的时机: before执行之前 和 after执行之后. 由时机和事件在一起,形成了六种事件。
触发器的注意事项:
一个完整的事件应该规定,在哪张表上,什么时机,什么动作上。
Create trigger trigger_name after update on table_name for each row Update table_name set cz_money=cz_money-20;
Create trigger 创建触发器.
trigger_name:触发器名字.
after update on table_name : 为 触发的事件 当czbk_truendt 表发生update 时,触发Update table_name set cz_money=cz_money-20;这个语句!
注意:1. 触发器不能重名 2.一个表同一个事件只能有一个触发器。
触发器的 删除 查看
删除: Drop trigger name ; 查看: show create trigger name;
触发器的数据old和new
在触发器内,获得触发该触发程序时的数据,利用触发程序内的 new 和 old 来完成。 Old : 监听事件所在表上的数据,在事件发生之前的数据,旧的数据。 New : 监听表上,事件发生之后,新处理后的数据。 Old.stu_money 表示 stu_money字段老的数据,new.stu_money 表示 stumoney字段 的 新的数据;如果是 insert 事件 不能使用 old; 如果是 delete 事件 不能使用 new。
如果一个触发程序,由多条sql 语句应该怎么办:
1. 语句组成语句块用(begin end)来标示语句块。
2. 语句组中的每个语句后需要用语句结束符来分割 ;如果使用分号作为每个语句的结束符那么mysql可能会认为第一个语句结束就是触发器的结束,所以我们需要在创建触发器前修改语句结束符,触发器创建结束后在修改回来。
Delimiter 命令可以设置命令结束符。
Delimiter $$;//将命令结束符号该为$$
Create trigger ruxue
after insert on czbk_student for each row
Begin//触发语句组开始
Update class set stu_cout=stu_count+1;//应为在上面讲结束符改为$$ 了所以分号不会结束语句
Update class set cz_money=cz_money+20;
End $$//触发语句组结束 使用$$ 结束触发器命令
Delimiter;在将语句结束符修改回来!