php+myql数据库触发器怎么写

 我来答
百度网友74b31132
2016-09-04 · 知道合伙人互联网行家
百度网友74b31132
知道合伙人互联网行家
采纳数:743 获赞数:2525
长沙市欣常盛文化传媒有限公司网络总监

向TA提问 私信TA
展开全部
  如果公司里有上百个表要做触发器,如果手动写代码的话。很累,一个小程序,自动生成mysql的触发代码。

  <?php

  $dbname = 'test';//数据库

  $tab1 = 'user'; //执行的表

  $tab2 = 'user_bak'; //被触发的表

  $conn = mysql_connect("localhost","root", "root",$dbname) or
  die("请检查你的主机名数据库用户名和密码");

  mysql_select_db($dbname, $conn) or die("数据库还没有连接");

  $query = mysql_query("SHOW COLUMNS FROM $tab1");mysql_query("");

  while($row=mysql_fetch_array($query,MYSQL_NUM)){//得到表的字段数组

  $temp[] = $row[0];

  $str1 .= '`'.$row[0].'`,';

  $str2 .= 'new.'.$row[0].',';

  $str3 .= $row[0].'=new.'.$row[0].',';

  }

  //insert触发器

  $inser_str = "<h1>{$tab1}表的insert触发器</h1>";

  $inser_str .= "create trigger ".$tab1."_insert <br>AFTER INSERT
  <br>on ".$tab1."<br>";

  $inser_str .="for each row<br> INSERT INTO {$tab2}
  (".rtrim($str1,',').') VALUES ('.rtrim($str2,',').');';

  //update触发器

  $update_str = "<h1>{$tab1}表的update触发器</h1>";

  $update_str .= "create trigger ".$tab1."_update<br>";

  $update_str .= "after update<br>";

  $update_str .= "on ".$tab1.'<br>';

  $update_str .= "for each row<br>";

  $update_str .= "update ".$tab2." set ".rtrim($str3,',')." where id =
  new.id;//这里的where id = new.id要手动改一下。改成主键的字段名";

  //delete触发器

  $delete_str = "<h1>{$tab1}表的delete触发器</h1>";

  $delete_str .= "create trigger ".$tab1."_delete<br>";

  $delete_str .= "after delete<br>";

  $delete_str .= "on ".$tab1."<br>";

  $delete_str .= "for each row <br>";

  $delete_str .= "delete from ".$tab2." where id=OLD.id//这里的where id =
  new.id要手动改一下。改成主键的字段名<br>";

  echo $inser_str;

  echo $update_str;

  echo $delete_str;

  echo
  '<p>注意:<br>1.触发器可用于InnoDB或MyISAM类型的表<br>2.插入的时候用AFTER INSERT
  更好的保证数据ID的对应,如果用before
  INSERT有可能造成ID不对应<br>3.如new.id则是表示主表中的字段<br>4.sql语句太多,用
  begin..end<br>5.使用show triggers语句查看数据库中的触发器。<br>6.删除触发器DROP TRIGGER
  IF EXISTS `test`<br>7.作者:<a
  href="http://hi.baidu.com/woaidelphi">华夏之星</a>';

  echo <<<EOT

  <h3>语法:</h3>

  create trigger <触发器名称><br>

  { before | after}<br>

  {insert | update | delete}<br>

  on <表名><br>

  for each row<br>

  <触发器SQL语句><br>

  参数详解如下:<br>

  create trigger <触发器名称>:创建一个新触发器,并指定触发器的名称。<br>

  { before | after}:用于指定在insert、update或delete语句执行前触发还是在语句执行后触发。<br>

  on <表名>:用于指定响应该触发器的表名。<br>

  for each row:触发器的执行间隔,for each row
  通知触发器每隔一行执行一次动作,而不是对整个表执行一次。<br>

  <触发器SQL语句>:触发器要执行的SQL语句,如果该触发器要执行多条SQL语句,要将多条语句放在begin…end块中。

  <br>如:begin…end块(它不能上phpadmin上运行。因为phpmyadmin没有对begin...end解析。)<br>

  mysql_query("<br>

  create trigger user_delete<br>

  after delete<br>

  on user<br>

  for each row BEGIN<br>

  delete from user_bak where id=OLD.id;<br>

  delete from aaa where id=OLD.id;<br>

  END;");<br>

  <br><br><br><br>

  EOT;

  ?>
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式