触发器的特点 PHP网络编程:使用触发器[1]
PHP网络编程:使用触发器[1]
——此文章摘自《PHP网络编程典型模块与实例精讲》定价 ¥ 特价 ¥ 详细>>//track linktech cn/?m_id=dangdang&a_id=A &l= &l_type = width= height= border= nosave>除了在PHP程序中使用数据库事务处理的方法来保证数据库操作的同步和数据库数据的完整性之外 还可以使用存储过程(在MySQL 后引入的功能)及触发器在数据库后台达到相同的功能 而且往往更加有效 以下先介绍如何在MySQL中使用触发器
一个触发器是一种声明 告诉数据库应该在特定事件发生时执行特定的触发程序 触发器可以定义在一个INSERT UPDATE或者DELETE命令之前或者之后执行
MySQL创建触发器的语法如下所示
//develop csai cn/web/images/ gif >
l 触发程序是与表有关的命名数据库对象 当表上出现特定事件时 将激活该对象
触发程序与命名为tbl_name的表相关 tbl_name必须引用永久性表 不能将触发程序与临时表(TEMPORARY)表或视图关联起来 trigger_time是触发程序的动作时间 它可以是BEFORE或AFTER 以指明触发程序是在激活它的语句之前或之后触发 trigger_event指明了激活触发程序的语句的类型 trigger_event可以是下述值之一
( )INSERT 将新行插入表时激活触发程序 如通过INSERT LOAD DATA和REPLACE语句 ( )UPDATE 更改某一行时激活触发程序 如通过UPDATE语句 ( )DELETE 从表中删除某一行时激活触发程序 如通过DELETE和REPLACE语句
![触发器的特点 PHP网络编程:使用触发器[1]](http://img.zhputi.com/uploads/38d5/38d5a48ea4962741b99622ce7f3432fa23766.jpg)
请注意 trigger_event与以表操作方式激活触发程序的SQL语句并不相似 这点很重要 例如 关于INSERT的BEFORE触发程序不仅能被INSERT语句激活 也能被LOAD DATA语句激活
对于具有相同触发程序动作时间和事件的给定表 不能有两个触发程序 例如 对于某一表 不能有两个 BEFORE UPDATE触发程序 但可以有一个BEFORE UPDATE触发程序和一个BEFORE INSERT触发程序 或一个BEFORE UPDATE触发程序和一个AFTER UPDATE触发程序
trigger_stmt是当触发程序激活时执行的语句 如果需执行多条语句 可使用BEGIN END复合语句结构 这样 就能使用存储子程序中允许的相同语句
以上是触发器的一些基本知识 下面讲解其在实际软件开发中的应用
在本章的帖子发布功能中 共使用了 条SQL语句组成的一个事务来完成整个发帖操作 虽然这样达到了目的 但是将使得整段数据库操作的代码很复杂 使用触发器可以把一些SQL语句放到数据库后台来执行 这样前台的PHP程序就会更为简洁 可以编写如下的触发器来完成帖子发布的一些辅助功能(更改父帖的f_has_child字段和发帖信息表的两个统计字段)
lishixinzhi/Article/program/PHP/201311/21374