Mysql5.0 触发器

王朝mysql·作者佚名  2006-05-10
窄屏简体版  字體: |||超大  

MySQL从5.0.2版开始引入触发器,触发器就是一个已命名的数据库对象,这个对象和某张表 相关,而且当这张表发生某种特定事件后,触发器将被激活执行相应的动作,触发器允许这 些动作在这张表中的一行或多行的数据被操作的前后执行。

1.语法:( 步长)触发间隔

CREATE TRIGGER <触发器名称>

{ BEFORE | AFTER }

{ INSERT | UPDATE | DELETE }

ON <表名称>

FOR EACH ROW <--

<触发的SQL语句>

触发器的执行间隔:FOR EACH ROW子句通知触发器

每隔一行执行一次动作,而不是对整个表执行一次。

2. NEW,OLD

在触发器的SQL语句中,你可以关联表中的任意列。但你不能仅使用列的名称去标识,那会使系统混淆,因为那里可能会有列的新名(这可能正是你要修改的,你的动作可能正是要修改列名),还有列的旧名存在。因此你必须用这样的语法来标识: "NEW . column_name"或者"OLD . column_name".这样在技术上处理(NEW | OLD . column_name)新和旧的列名属于创建了过渡变量("transition variables")。

3.简单实例

delimiter $$

create trigger groups_forSchool

before insert on groups

for each row

begin

set NEW.school='scut';

end $$

delimiter ;

当我们要向表中的行插入时,触发器就会被激活,执行将school列的值改为'scut'的动作。

4.加密实例

一个客户数据库中包含客户密码pwd,管理员必须将这些信息加密后存入磁盘。针对这种情况,管理员可以通过创建一个触发器来自动获取并加密这些数据然后再插入相应的数据库表中。如下所示:(参考 小题大作)

mysql> delimiter //

mysql> create trigger t_customer_insert before insert on customer

-> for each row

-> begin

-> set NEW.pwd = aes_encrypt(NEW.pwd,'password');

-> end;

-> //

Query OK, 0 rows affected (0.00 sec)

mysql> delimiter ;

mysql> insert into customer values (1,'fred','smith','456097234');

Query OK, 1 row affected (0.00 sec)

mysql> select * from customer;

可以看出存在磁盘数据库表中的客户密码pwd已经变成加密后的不可读乱码格式。

/* 加密函数:AES_ENCRYPT(str,key_str)*/

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航