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的触发器
php自动生成mysql的触发代码。的更多相关文章
- 如果公司里有上百个表要做触发器,如果手动写代码的话。很累,所以今天写了一个小程序,自动生成mysql的触发代码。
<?php $dbname = 'test';//数据库 $tab1 = 'user'; //执行的表 $tab2 = 'user_bak'; //被触发的表 $conn = mysql_con ...
- EF自动生成的模型edmx代码分析
edmx代码分析 本文分析Entity Framework从数据库自动生成的模型文件代码(扩展名为edmx). 1. 概述 本文使用的数据库结构尽量简单,只有2个表,一个用户表和一个分公司表(相当于部 ...
- 利用strut2标签自动生成form前端验证代码
利用strut2标签自动生成form前端验证代码,使用到的技术有1.struts2标签,如<s:form> <s:textfieled>2.struts2读取*Validati ...
- 自动化API之一 自动生成Mysql数据库的微服务API
本文演示如何利用Uniconnector平台,自动生成Mysql数据库的API,节约开发人员编写后台API的时间.使用生成API的前提是开发者有 自己的数据库,有数据库的管理权限,并能通过外网 ...
- springboot自动生成mysql的DAO层代码
springboot提供了强大丰富的整合内容,但是每次要写一堆dao层的xml或者数据库相关的配置代码的时候,还是挺繁琐又容易出错的. 可以用mybatis-generator自动生成代码: 只需要加 ...
- MyBatis Generator作为maven插件自动生成增删改查代码及配置文件例子
什么是MyBatis Generator MyBatis Generator (MBG) 是一个Mybatis的代码生成器,可以自动生成一些简单的CRUD(插入,查询,更新,删除)操作代码,model ...
- 利用mybatis-generator自动生成数据持久化的代码
MyBatis生成器简介 MyBatis Generator(MBG)是MyBatis MyBatis 和iBATIS的代码生成器.它将生成所有版本的MyBatis的代码,以及版本2.2.0之后的iB ...
- Linux自动备份MySQL数据库脚本代码
下面这段Linux的Shell脚本用于每日自动备份MySQL数据库,可通过Linux的crontab每天定时执行 在脚本中可设置需要备份的数据库表清单,并且会将备份文件通过gzip压缩.需要注意的是, ...
- Java自动生成asmx的webservice代码
第一种方式:针对CXF自动生成的代码对响应类大小写区别问题,可以使用此方法. 工具为Eclipse. 新建Web Service Client. 输入地址点击finish即可自动生成. 调用方式: p ...
随机推荐
- c# lambda表达式学习
1. 普通绑定: public void button1_Click(object sender, EventArgs e) { MessageBox.Show("ok"); } ...
- sql语句in
在今天之前sql一直用in语句,知道今天遇到一张数据量很大的表查了三分钟才查出来,这才意识到数据库优化有多重要.作为一名开发人员,首先从优化sql语句开始. 之前用in写sql是这样的 select ...
- web sql 基本操作 - 增删改查
不喜欢看md原文的 可以访问这个链接:http://note.youdao.com/noteshare?id=6a91e3dea7cdf5195bb0e851d9fcb5a5 # web sql 增删 ...
- vue兼容ie
为了兼容IE github build/webpack.base.conf.js [vuex] vuex requires a Promise polyfill in this browser. // ...
- RabbitMq window下配置安装
1. 搭建环境 1.1 安装Erlang语言运行环境 由于RabbitMQ使用Erlang语言编写,所以先安装Erlang语言运行环境. 1.2 Erlang(['ə:læŋ])是一种通用的面向并发的 ...
- Oracle 分析函数及常用函数
什么叫分析函数(Analytic function)? Oracle从8.1.6开始提供分析函数,分析函数用于计算基于组的某种聚合值,它和聚合函数的不同之处是 对于每个组返回多行,而聚合函数对于每个组 ...
- Winform创建解决方案
Winform的开发工具可以使用VS2005---VS2013,版本在不断升级,VS的功能也越来越强大.本系列文章采用VS2012(以后全称VS)演示. 窗体是winform开发的基础,需要掌握窗体的 ...
- Python 使用PyMySql 库 连接MySql数据库时 查询中文遇到的乱码问题(实测可行) python 连接 MySql 中文乱码 pymysql库
最近所写的代码中需要用到python去连接MySql数据库,因为是用PyQt5来构建的GUI,原本打算使用PyQt5中的数据库连接方法,后来虽然能够正确连接上发现还是不能提交修改内容,最后在qq交流群 ...
- 如何在Oracle官网下载java的JDK最新版本和历史版本
官网上最显眼位置只显示了Java SE的JDK的最新版本下载链接,因为都是英文,如果英文不是很好,寻找之前的JDK版本需要很长时间,而且未必能在那个隐蔽的位置找到之前版本列表. 今天小编来给你详细讲解 ...
- .Net调用Java端带有WS-Security支持的Web Service各方案实战【转】
原文:http://www.xuebuyuan.com/641669.html 到现在为止,我们AEP平台已经发布很长一段时间了,也有很多ISV接入并上线了,就语言而言,目前主要有三类:Java..N ...