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

<?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. WPF 动画 和 色彩 的随笔

    1:善于用“Margin”做动画效果 2:色彩处理通常用:Brush,而Brush(如:SolidColorBrush)的实例化,通常需要载入“ System.Windows.Media.Color” ...

  2. Rails 5 Test Prescriptions(everday Rspectest作者推荐) 目录 1-3章

    总文档连接: RSpec.info/documentation/ 如何使用TDD 和 自动化测试来建立一个Rails app. TDD让你用测试来探索代码的设计.你将学习可利用的工具,并学习用什么工具 ...

  3. UVA-10384 The Wall Pushers (IDA*)

    题目大意:走迷宫,遇到墙时可以推着墙走,但墙后还是墙时便不能推.求出一条任意的最短路径. 题目分析:这道题出的比较人性,输入的时候便是将四周的墙用二进制数表示好了,其实这样减轻了做题人的负担.IDA* ...

  4. 校验基于EO的VO中的字段是否发生变化

    I have a table region and there are multiple records fetching from a Entity based VO. Now I have upd ...

  5. HDU 1029 基础dp

    题目链接:Ignatius and the Princess IV 大意:就是在N个数里找出唯一一个至少出现过(N+1)/ 2 次的数. 1 <= N <= 999999. hash: / ...

  6. Java解析Json数据的两种方式

    JSON数据解析的有点在于他的体积小,在网络上传输的时候可以更省流量,所以使用越来越广泛,下面介绍使用JsonObject和JsonArray的两种方式解析Json数据. 使用以上两种方式解析json ...

  7. L203 词汇题

    Conditions for the growth of this plant are optimum in early summer.we will live as free people, not ...

  8. 使用 Windows 10 中的加速度计(Accelerometer,重力传感器)

    在做 UWP 应用开发的时候还有什么理由可以用到加速度计呢?场景很多啦,比如做游戏,做类似 Surface Hub 那种一边旋转,一边所有内容跟着一起转的效果. Windows 10 UWP 中的加速 ...

  9. [UOJ213][UNR #1]争夺圣杯

    uoj description 一个长为\(n\)的序列,给定一个参数\(m\),求所有长度为\(m\)的区间的最大值之和. 对于所有的\(m\in[1,n]\)你都需要分别求出答案然后异或起来. \ ...

  10. koa/koa2项目搭建

    一键生成koa/koa2项目: 1. npm install -g koa-generator 2.新建项目目录 koa mytest (koa1项目) koa2 koa2test (koa2项目) ...