MySQL触发器语句代码在线生成-源码(PHP版)
MySQL触发器 触发程序语句代码自动生成源码(PHP版),实现数据同步
点击进入在线编解码工具页面>>>
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <title>MySQL 触发器(TRIGGER)语句代码在线生成 | 未来往事</title>
- <style type="text/css">
- <!--
- body,td,th {
- font-size: 13px;
- line-height:22px;
- }
- -->
- </style>
- <script language="javascript">
- function res(){
- document.getElementById("tab2").value = "pre_"+document.getElementById("tab1").value;
- }
- </script>
- <meta name="description" content="MySQL触发程序--触发器(TRIGGER)语句代码在线生成" />
- <meta name="keywords" content="mysql,mysql触发器,互联网,负载均衡,缓存技术,数据库,系统架构,搜索引擎,分布式存储,云计算,运维,未来往事,Web,PHP,Nginx,MySQL" />
- </ head>
- <body style="margin:0px;padding:0px;">
- <div style="width:90%;margin:0 auto;word-wrap:break-word;word-break:normal;"><span style="text-align:center;font-family:'黑体';margin-bottom:10px;"><h1>MySQL 触发器 触发程序(TRIGGER)语句代码在线生成</h1></span>
- <span style="color:#2E8B57;margin-bottom:25px;">作者:<a href="https://www.fity.cn">未来往事</a> 最后更新:2013/04/09</span>
- 了解更多<a href="https://www.fity.cn/post/352/">《MySQL 触发器 触发程序(TRIGGER)》</a>相关知识
- <hr><form action="#" method="post" name="form1" target="_blank" id="form1">
- <b>请正确输入数据库连接信息</b>(如果你的数据库不能被成功连接,则不能生成相关的MySQL触发器语句)
- MySQL主机地址:端口:<input name="dbhost" type="text" id="dbhost" value="localhost"/>
- 用户:<input name="dbuser" type="text" id="dbuser" value="root" />
- 密码:<input name="dbpasswd" type="password" id="dbpasswd"/>
- <b>接下来,请输入你需要创建的触发器的相关信息:</b>
- 触发器数据库名称:<input name="dbname" type="text" id="dbname" value="dbname" />
- 触发器执行表名称:<input name="tab1" type="text" id="tab1"/>
- 被触发的数据表名称:<input name="tab2" type="text" id="tab2"/>
- <input type="submit" name="Submit" value="提交" />
- </form>
- < ?php
- if(isset($_POST['Submit'])){
- $dbhost = $_POST['dbhost']; //主机名
- $dbUserName = $_POST['dbuser']; // 用户名
- $dbpassword = $_POST['dbpasswd']; //密码
- $dbname = $_POST['dbname']; //数据库名
- $tab1 = $_POST['tab1']; //执行的表
- $tab2 = $_POST['tab2']; //被触发的表
- $conn = mysql_connect($dbhost, $dbUserName, $dbpassword) or die("<p style='color:#ff0000;line-height:26px;'><b>Error Notice:</b>
- 请检查你的MySQL主机地址、用户及密码是否填写正确;<br />
- 如确定正常,请检查你的MySQL数据库是否能被外网访问,如果不能被外网访问也无法获取触发器语句;<br />
- 如果你不希望你的MySQL数据库被外网访问,请到 未来往事(https://www.fity.cn) 博客下载该生成器的PHP程序源码:<a href='https://www.fity.cn/post/353/'>程序PHP源码</a>,然后放入你本地PHP环境再获取触发器语句</p>");
- mysql_select_db($dbname, $conn) or die("数据库还没有连接");
- mysql_select_db("$dbname");
- $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].',';
- }
- echo "<hr>";
- //insert触发器
- echo "<h2>{$tab1}表的insert触发器</h2>";
- echo "drop trigger " . $tab1 . "_insert; #如果该触发器存在则删除
- ";
- echo "delimiter | #等同于delimiter // 或 delimiter $$
- ";
- echo "create trigger " . $tab1 . "_insert
- ";
- echo "after insert
- ";
- echo "on " . $tab1 . " #如果是跨库操作,需要修改格式为:`执行数据库`.`执行数据表`
- ";
- echo "for each row #行级别
- ";
- echo "begin
- ";
- echo "insert into {$tab2} #如果是跨库操作,需要修改为`被触发的数据库`.`被触发的数据表`
- (".rtrim($str1,',').') VALUES ('.rtrim($str2,',').');'."
- ";
- echo("end |
- ");
- echo("delimiter ;
- ");
- //update触发器
- echo "<h2>{$tab1}表的update触发器</h2>";
- echo "drop trigger " . $tab1 . "_update; #如果该触发器存在则删除
- ";
- echo "delimiter | #等同于delimiter // 或 delimiter $$
- ";
- echo "create trigger " . $tab1 . "_update
- ";
- echo "after update
- ";
- echo "on " . $tab1 . " #如果是跨库操作,需要修改格式为:`执行数据库`.`执行数据表`
- ";
- echo "for each row #行级别
- ";
- echo "begin
- ";
- echo "update ".$tab2." set ".rtrim($str3,',')." where id = new.id; #这里的where id = new.id要手动改一下。改成主键的字段名";
- echo("end |
- ");
- echo("delimiter ;
- ");
- //delete触发器
- echo "<h2>{$tab1}表的delete触发器</h2>";
- echo "drop trigger " . $tab1 . "_delete; #如果该触发器存在则删除
- ";
- echo "delimiter | #等同于delimiter // 或 delimiter $$
- ";
- echo "create trigger " . $tab1 . "_delete
- ";
- echo "after delete
- ";
- echo "for each row #行级别
- ";
- echo "begin
- ";
- echo "delete from ".$tab2." where id=OLD.id #这里的where id = new.id要手动改一下。改成主键的字段名
- ";
- echo("end |
- ");
- echo("delimiter ;
- ");
- }
- echo '
- <hr><p style="line-height:26px;margin-top:25px;font-size:14px;"><h3>注意:</h3>1.触发器可用于InnoDB或MyISAM类型的表
- 2.插入的时候用AFTER INSERT 更好的保证数据ID的对应,如果用before INSERT有可能造成ID不对应
- 3.如new.id则是表示主表中的字段
- 4.sql语句太多,用 begin..end
- 5.使用show triggers语句查看数据库中的触发器。
- 6.删除触发器DROP TRIGGER IF EXISTS `test`
- 7.作者:<a href="https://www.fity.cn">未来往事</a>';
- echo <<<EOT
- <h3>语法:</h3>
- create trigger <触发器名称>
- { before | after}
- {insert | update | delete}
- on <表名>
- for each row
- <触发器SQL语句>
- 参数详解如下:
- create trigger <触发器名称>:创建一个新触发器,并指定触发器的名称。
- { before | after}:用于指定在insert、update或delete语句执行前触发还是在语句执行后触发。
- on <表名>:用于指定响应该触发器的表名。
- for each row:触发器的执行间隔,for each row 通知触发器每隔一行执行一次动作,而不是对整个表执行一次。
- <触发器SQL语句>:触发器要执行的SQL语句,如果该触发器要执行多条SQL语句,要将多条语句放在begin…end块中。
- 如:begin…end块(它不能上phpadmin上运行。因为phpmyadmin没有对begin...end解析。)
- mysql_query("
- create trigger user_delete
- after delete
- on user
- for each row BEGIN
- delete from user_bak where id=OLD.id;
- delete from aaa where id=OLD.id;
- END;");
- Copyright © <a href="https://www.fity.cn">Fity.cn</a> All Rights Reserved.
- EOT;
- ?>
- </div>
- </body>
- </html>
本文作者:未来往事
本站使用「署名 4.0 国际」创作共享协议,可自由转载、引用,但需署名作者且注明文章出处
此处评论已关闭