操作一个动作要影响到宁外一个动作的时候就可以用到触发器,具体触发器是干什么用的呢,请见下文
MySQL触发器
触发器在数据库系统开发过程中具有非常重要的作用,例如可以防止有害数据录入数据库,可以改变或取消insert、update和delete语句的执行及在一个会话中监听数据库中的数据的改变。
实例263:创建触发器
实例说明
如果用户打算在数据库中通过触发器实现某一动作的监听,那么首先应该创建触发器,触发器是在“命令提示符”下创建的,如图9.16所示。
图9.16 触发器创建过程 |
技术要点
MySQL数据库创建触发器的格式如下:
create trigger <触发器名称> { before | after} {insert | update | delete} on <表名> for each row <触发器SQL语句>
|
create trigger <触发器名称>:创建一个新触发器,并指定触发器的名称。
{ before | after}:用于指定在insert、update或delete语句执行前触发还是在语句执行后触发。
on <表名>:用于指定响应该触发器的表名。
for each row:触发器的执行间隔,for each row 通知触发器每隔一行执行一次动作,而不是对整个表执行一次。
<触发器SQL语句>:触发器要执行的SQL语句,如果该触发器要执行多条SQL语句,要将多条语句放在begin…end块中。
实现过程
(1)在“命令提示符”下创建数据表tb_test。代码如下:
create table tb_test(t_id varchar(20),t_name varchar(20))
|
(2)将换行标记转换为“//”。代码如下:
delimiter //
|
(3)创建触发器,实现无论用户向表tb_test添加什么数据都使字段t_name的内容为“mrsoft”。代码如下:
create trigger test_tri before insert on tb_test for each row set new.t_name='mrsoft'
|
(4)向表tb_test添加一条记录,并查看添加后的结果。代码如下:
insert into tb_test(t_id,t_name) values('mr0001', '123')// select * from tb_test
|
举一反三
根据本实例,读者可以:
为某表创建触发器,要求在更新数据前触发。
为某表创建触发器,要求在删除数据前触发。
实例264:查看触发器
这是一个查看触发器的实例
录像位置:光盘\mingrisoft\09\264
实例说明
在MySQL数据库中,创建触发器前应先查看数据库中的触发器,这样既可以使开发人员对指定的数据库中的所有触发器及功能有一个直观的把握,而且又可以避免创建同名或类似功能的触发器。运行本实例,如图9.17所示,首先在图中的文本框中输入要查看触发器的数据库,然后单击“查看”按钮,即可将该数据库中所有的触发器的详细信息显示出来。
图9.17 查看触发器 |
技术要点
查看MySQL数据库中的触发器详细信息,可以通过如下语句实现:
show triggers
|
使用show triggers语句前应先指明要查看的数据库。
实现过程
(1)选择要查看触发器的数据库。代码如下:
$dbname=$_POST[name]; $conn=mysql_connect("localhost","root","root"); mysql_select_db($dbname,$conn); mysql_query("set names gb2312");
|
(2)执行show triggers语句,并显示所查找到的触发器的详细信息。代码如下:
<?php triggers",$conn); ); if($info==false) { ?> <tr> <td height="25" colspan="5" bgcolor="#FFFFFF"> <div align="center">该数据库没有设置触发器!</div></td> </tr> <?php } else { do { ?> <tr> <td height="25" bgcolor="#FFFFFF"><div align="center"> <?php echo $info[Trigger];?></div></td> <td height="25" bgcolor="#FFFFFF"><div align="center"> <?php echo $info[Table];?></div></td> <td height="25" bgcolor="#FFFFFF"><div align="center"> <?php echo $info[Event];?></div></td> <td height="25" bgcolor="#FFFFFF"><div align="center"> <?php echo $info[Timing];?></div></td> <td height="25" bgcolor="#FFFFFF"><div align="center"> <?php echo $info[Statement];?></div></td> </tr> <?php } while($info=mysql_fetch_array($sql)); } ?>
|
举一反三
根据本实例,读者可以:
在论坛中,通过触发器实现帖子的自动回复。
在留言板中,通过触发器实现将含有指定非法关键字的留言自动删除。
还没有人抢沙发呢~