如果公司里有上百个表要做触发器,如果手动写代码的话。很累,所以今天写了一个小程序,

<?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的触发器

php自动生成mysql的触发代码。的更多相关文章

  1. 如果公司里有上百个表要做触发器,如果手动写代码的话。很累,所以今天写了一个小程序,自动生成mysql的触发代码。

    <?php $dbname = 'test';//数据库 $tab1 = 'user'; //执行的表 $tab2 = 'user_bak'; //被触发的表 $conn = mysql_con ...

  2. EF自动生成的模型edmx代码分析

    edmx代码分析 本文分析Entity Framework从数据库自动生成的模型文件代码(扩展名为edmx). 1. 概述 本文使用的数据库结构尽量简单,只有2个表,一个用户表和一个分公司表(相当于部 ...

  3. 利用strut2标签自动生成form前端验证代码

    利用strut2标签自动生成form前端验证代码,使用到的技术有1.struts2标签,如<s:form> <s:textfieled>2.struts2读取*Validati ...

  4. 自动化API之一 自动生成Mysql数据库的微服务API

        本文演示如何利用Uniconnector平台,自动生成Mysql数据库的API,节约开发人员编写后台API的时间.使用生成API的前提是开发者有 自己的数据库,有数据库的管理权限,并能通过外网 ...

  5. springboot自动生成mysql的DAO层代码

    springboot提供了强大丰富的整合内容,但是每次要写一堆dao层的xml或者数据库相关的配置代码的时候,还是挺繁琐又容易出错的. 可以用mybatis-generator自动生成代码: 只需要加 ...

  6. MyBatis Generator作为maven插件自动生成增删改查代码及配置文件例子

    什么是MyBatis Generator MyBatis Generator (MBG) 是一个Mybatis的代码生成器,可以自动生成一些简单的CRUD(插入,查询,更新,删除)操作代码,model ...

  7. 利用mybatis-generator自动生成数据持久化的代码

    MyBatis生成器简介 MyBatis Generator(MBG)是MyBatis MyBatis 和iBATIS的代码生成器.它将生成所有版本的MyBatis的代码,以及版本2.2.0之后的iB ...

  8. Linux自动备份MySQL数据库脚本代码

    下面这段Linux的Shell脚本用于每日自动备份MySQL数据库,可通过Linux的crontab每天定时执行 在脚本中可设置需要备份的数据库表清单,并且会将备份文件通过gzip压缩.需要注意的是, ...

  9. Java自动生成asmx的webservice代码

    第一种方式:针对CXF自动生成的代码对响应类大小写区别问题,可以使用此方法. 工具为Eclipse. 新建Web Service Client. 输入地址点击finish即可自动生成. 调用方式: p ...

随机推荐

  1. 简单的spring mvc实例

    简单的springmvc实例 pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi=&qu ...

  2. poj3281网络流之最大流

    加一个源点和汇点,把每头牛拆成两个点,不拆点的话可能会出现多对食物与饮料被一个牛享用的情况,拆点后流量为1,不能同时通过了 然后用最大流处理,每个链接边都是1 #include<map> ...

  3. UVA-11903 Just Finish it up

    题目大意:一个环形跑道上有n个加油站,每个加油站可加a[i]加仑油,走到下一站需要w[i]加仑油,初始油箱为空,问能否绕跑道一圈,起点任选,若有多个起点,找出编号最小的. 题目分析:如果从1号加油站开 ...

  4. HTTP相关知识点

    一.工作原理       HTTP协议工作于客户端-服务器架构上.浏览器作为HTTP客户端通过URL向HTTP服务端(即web服务端)发送所有请求. Web服务器接收到请求后,向客户端发送相应的响应信 ...

  5. LNMP架构下Discuz论坛的搭建

    在上一节中,我们对lnmp架构下的mysql.php.nginx进行源码的安装,并设置了相关的安装参数.现在我们将在上一节的基础上,把三者联系起来进行一个论坛的部署. 一.首先进行Discuz(社区论 ...

  6. 06-jenkins的账号相关的问题

    飞测说:最近几天,在团队分享jenkins后,大家都十分感兴趣,各自下载安装和练习,然而jenkins2.3安装默认有权限设置,这块好多人遇到了问题,现在统一就账号登录的问题一起看看,踩过的坑,希望对 ...

  7. 从HDU2588:GCD 到 HDU5514:Frogs (欧拉公式)

    The greatest common divisor GCD(a,b) of two positive integers a and b,sometimes written (a,b),is the ...

  8. Redis压测命令

    1.redis-benchmark 100个并发连接,100000个请求: redis-benchmark -h 127.0.0.1 -p 6379 -c 100 -n 100000 存取为100个字 ...

  9. 数据库Job定时任务

    数据库Job再熟悉不过了,因为经常要数据库定时的自动执行一些脚本,或做数据库备份,或做数据的提炼,或做数据库的性能优化,包括重建索引等等的工作.但是,Oracle定时器Job时间的处理上,千变万化,今 ...

  10. graphql cli 开发graphql api flow

    作用 代码生成 schema 处理 脚手架应用创建 项目管理 安装cli npm install -g graphql-cli 初始化项目(使用.graphqlconfig管理) 以下为demo de ...