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

posted on 2016-03-10 09:47 jason&li 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/ldms/p/5260660.html

php自动生成mysql的触发代码。相关推荐

  1. Mybatis自动生成实体类等代码

    Mybatis自动生成实体类等代码 具体步骤 具体步骤 在本机随便找个目录存放以下文件,如图(mybatis-generator-core-1.3.5.jar 和 mysql-connector-ja ...

  2. java增删改一键生成_easyCode(java自动生成增删改查代码)

    [实例简介]读取数据库表结构 自动生成增删改查代码 [实例截图] [核心代码] package com.isoftstone.autocoding; import com.isoftstone.aut ...

  3. 自动生成mybatisplus的相关代码

    导入对应的jar包,这就不用多说了 package com.app.appapi.generatorcode;import com.baomidou.mybatisplus.core.toolkit. ...

  4. 如何自动生成『状态机』代码?

    关注.星标公众号,直达精彩内容 来源:网络素材 有限自动机(Finite Automata Machine)是计算机科学的重要基石,它在软件开发领域内通常被称作有限状态机(Finite State M ...

  5. python数据字典ppt_Python3自动生成MySQL数据字典的markdown文本的实现

    为啥要写这个脚本 五一前的准备下班的时候,看到同事为了做数据库的某个表的数据字典,在做一个复杂的人工操作,就是一个字段一个字段的纯手撸,那速度可想而知是多么的折磨和锻炼人的意志和耐心,反正就是很耗时又 ...

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

    Linux自动备份MySQL数据库脚本代码 下面这段Linux的Shell脚本用于每日自动备份MySQL数据库,可通过Linux的crontab每天定时执行 在脚本中可设置需要备份的数据库表清单,并且 ...

  7. .NET 6新特性试用 | 自动生成高性能日志记录代码

    前言 要想记录日志,常用的方式是访问ILogger实例提供的日志记录方法: private readonly ILogger<WeatherForecastController> _log ...

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

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

  9. 利用ApacheCXF自动生成webservice的客户端代码

    利用ApacheCXF自动生成webservice的客户端代码 一.环境准备 1.JDK环境 2.下载apache-cxf发布包,举例版本为3.2.14,解压发布包,设置CXF_HOME,并添加%CX ...

最新文章

  1. 如何用LSTM自编码器进行极端事件预测?(含Python代码)
  2. ubuntu install node npm bower
  3. 缓存穿透、缓存并发、热点缓存之最佳招式
  4. mybatis中常见的坑
  5. 深入理解计算机系统结构——并发编程
  6. JS复制内容到剪贴板
  7. 个人项目:wc程序(java)
  8. 《大话设计模式》第29章-OOTV杯超级模式大赛—模式总结(一)
  9. Android Theme.Dialog 到光 AppCompatDialog
  10. 关于学习新知识的一点想法
  11. Linux内核分析-week 1
  12. Spring Cloud各组件
  13. HighCharts:图表默认的英文日期改为中文显示
  14. python中格式化输出_python如何实现格式化输出
  15. beyond compare 对class文件反编译及比较
  16. DIM-00014: 无法打开windows nt服务控制管理器
  17. 部署DoraCloud实现桌面虚拟化,一款非常简单方便的桌面虚拟化管理平台
  18. 医学检验论文题目大全汇总
  19. 【ansible】如何将ansible jinja2的双花括号转义?
  20. tracker使用_如何使用Tracker查找钥匙,钱包,电话或其他任何东西

热门文章

  1. mysql open-files-limit_在mysql 5.5中更改open-files-limit
  2. WebSocket基础知识笔记
  3. Javascript对象及数组用法笔记
  4. linux中profile文件作用,解析Linux系统中bashrc和profile文件的作用区别
  5. matlab中select,[转载]MATLAB阈值获取函数ddencmp、thselect、wbmpen和w
  6. 数据库---增删改查
  7. 通过rtcwake命令设置系统S3(休眠到内存)/S4(挂起到硬盘)一段时间后自动唤醒
  8. 一个在线编写前端代码的好玩的工具
  9. Windows7旗舰版磁盘分区详解—附分区步骤截图
  10. yum 出错,提示Segmentation Fault (core Dumped) 的解决办法