• php自动生成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;
    ?>
    PHP与MYSQL的触发器

  • 相关阅读:
    JDK内置工具使用
    awk 数组
    c++面试题
    C++内存分配
    awk 数字比较
    awk脚本 排序
    awk 读取 shell 变量的方法
    NVelocity系列:Getting Start With NVelocity
    Castle.ActiveRecord分页示例
    NVelocity系列:NVelocity配置详解
  • 原文地址:https://www.cnblogs.com/ldms/p/5260660.html
Copyright © 2020-2023  润新知