mysql 触发器

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;在将语句结束符修改回来!

 

posted @ 2014-07-30 15:59  奋进程序猿  阅读(297)  评论(0编辑  收藏  举报