MySQL触发器语句代码在线生成-源码(PHP版)

MySQL触发器 触发程序语句代码自动生成源码(PHP版),实现数据同步

点击进入在线编解码工具页面>>>

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
  2. <html xmlns="http://www.w3.org/1999/xhtml">  
  3. <head>  
  4. <title>MySQL 触发器(TRIGGER)语句代码在线生成 | 未来往事</title>  
  5. <style type="text/css">  
  6. <!--  
  7. body,td,th {  
  8. font-size: 13px;  
  9. line-height:22px;  
  10. }  
  11. -->  
  12. </style>  
  13. <script language="javascript">  
  14. function res(){  
  15. document.getElementById("tab2").value = "pre_"+document.getElementById("tab1").value;  
  16. }  
  17. </script>  
  18. <meta name="description" content="MySQL触发程序--触发器(TRIGGER)语句代码在线生成" />  
  19. <meta name="keywords" content="mysql,mysql触发器,互联网,负载均衡,缓存技术,数据库,系统架构,搜索引擎,分布式存储,云计算,运维,未来往事,Web,PHP,Nginx,MySQL" />  
  20. </ head>  
  21. <body             style="margin:0px;padding:0px;">  
  22. <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>  
  23. <span style="color:#2E8B57;margin-bottom:25px;">作者:<a href="https://www.fity.cn">未来往事</a>  最后更新:2013/04/09</span>  
  24.   
  25. 了解更多<a href="https://www.fity.cn/post/352/">《MySQL 触发器 触发程序(TRIGGER)》</a>相关知识  
  26. <hr><form action="#" method="post" name="form1" target="_blank" id="form1">  
  27. <b>请正确输入数据库连接信息</b>(如果你的数据库不能被成功连接,则不能生成相关的MySQL触发器语句)  
  28.   
  29. MySQL主机地址:端口:<input name="dbhost" type="text" id="dbhost" value="localhost"/>   
  30. 用户:<input name="dbuser" type="text" id="dbuser" value="root" />   
  31. 密码:<input name="dbpasswd" type="password"  id="dbpasswd"/>  
  32.   
  33.   
  34.   
  35.   
  36. <b>接下来,请输入你需要创建的触发器的相关信息:</b>  
  37.   
  38. 触发器数据库名称:<input name="dbname" type="text" id="dbname" value="dbname" />  
  39.   
  40. 触发器执行表名称:<input name="tab1" type="text" id="tab1"/>  
  41.   
  42. 被触发的数据表名称:<input name="tab2" type="text" id="tab2"/>  
  43.   
  44. <input type="submit" name="Submit" value="提交" />  
  45.   
  46. </form>  
  47. < ?php  
  48. if(isset($_POST['Submit'])){  
  49.   
  50. $dbhost = $_POST['dbhost'];  //主机名  
  51. $dbUserName = $_POST['dbuser'];   // 用户名  
  52. $dbpassword = $_POST['dbpasswd'];  //密码  
  53.   
  54. $dbname = $_POST['dbname']; //数据库名  
  55. $tab1 = $_POST['tab1']; //执行的表  
  56. $tab2 = $_POST['tab2']; //被触发的表  
  57.   
  58. $conn = mysql_connect($dbhost$dbUserName$dbpasswordor die("<p style='color:#ff0000;line-height:26px;'><b>Error Notice:</b> 
  59. 请检查你的MySQL主机地址、用户及密码是否填写正确;<br /> 
  60. 如确定正常,请检查你的MySQL数据库是否能被外网访问,如果不能被外网访问也无法获取触发器语句;<br /> 
  61. 如果你不希望你的MySQL数据库被外网访问,请到 未来往事(https://www.fity.cn) 博客下载该生成器的PHP程序源码:<a href='https://www.fity.cn/post/353/'>程序PHP源码</a>,然后放入你本地PHP环境再获取触发器语句</p>");  
  62. mysql_select_db($dbname$connor die("数据库还没有连接");  
  63. mysql_select_db("$dbname");  
  64. $query = mysql_query("SHOW COLUMNS FROM $tab1");mysql_query("");  
  65. while($row=mysql_fetch_array($query,MYSQL_NUM)){//得到表的字段数组  
  66. $temp[] = $row[0];  
  67. $str1 .=  '`'.$row[0].'`,';  
  68. $str2 .=  'new.'.$row[0].',';  
  69. $str3 .=  $row[0].'=new.'.$row[0].',';  
  70. }  
  71. echo "<hr>";  
  72. //insert触发器  
  73. echo "<h2>{$tab1}表的insert触发器</h2>";  
  74. echo "drop trigger " . $tab1 . "_insert;  #如果该触发器存在则删除 
  75. ";   
  76. echo "delimiter |   #等同于delimiter // 或 delimiter $$ 
  77. ";  
  78. echo "create trigger " . $tab1 . "_insert 
  79. ";  
  80. echo "after insert 
  81. ";  
  82. echo "on " . $tab1 . "   #如果是跨库操作,需要修改格式为:`执行数据库`.`执行数据表` 
  83. ";  
  84. echo "for each row   #行级别 
  85. ";  
  86. echo "begin 
  87. ";  
  88. echo "insert into {$tab2}   #如果是跨库操作,需要修改为`被触发的数据库`.`被触发的数据表` 
  89. (".rtrim($str1,',').') VALUES ('.rtrim($str2,',').');'." 
  90. ";  
  91. echo("end | 
  92. ");  
  93. echo("delimiter ; 
  94. ");  
  95.   
  96. //update触发器  
  97. echo "<h2>{$tab1}表的update触发器</h2>";  
  98. echo "drop trigger " . $tab1 . "_update;  #如果该触发器存在则删除 
  99. ";  
  100. echo "delimiter |   #等同于delimiter // 或 delimiter $$ 
  101. ";  
  102. echo "create trigger " . $tab1 . "_update 
  103. ";  
  104. echo "after update 
  105. ";  
  106. echo "on " . $tab1 . "   #如果是跨库操作,需要修改格式为:`执行数据库`.`执行数据表` 
  107. ";  
  108. echo "for each row   #行级别 
  109. ";  
  110. echo "begin 
  111. ";  
  112. echo "update ".$tab2." set ".rtrim($str3,',')." where id = new.id;   #这里的where id = new.id要手动改一下。改成主键的字段名";  
  113. echo("end | 
  114. ");  
  115. echo("delimiter ; 
  116. ");  
  117.   
  118. //delete触发器  
  119. echo "<h2>{$tab1}表的delete触发器</h2>";  
  120. echo "drop trigger " . $tab1 . "_delete;  #如果该触发器存在则删除 
  121. ";  
  122. echo "delimiter |   #等同于delimiter // 或 delimiter $$ 
  123. ";  
  124. echo "create trigger " . $tab1 . "_delete 
  125. ";  
  126. echo "after delete 
  127. ";  
  128. echo "for each row   #行级别 
  129. ";  
  130. echo "begin 
  131. ";  
  132. echo "delete from ".$tab2." where id=OLD.id   #这里的where id = new.id要手动改一下。改成主键的字段名 
  133. ";  
  134. echo("end | 
  135. ");  
  136. echo("delimiter ; 
  137. ");  
  138. }  
  139.   
  140. echo ' 
  141. <hr><p style="line-height:26px;margin-top:25px;font-size:14px;"><h3>注意:</h3>1.触发器可用于InnoDB或MyISAM类型的表 
  142. 2.插入的时候用AFTER INSERT 更好的保证数据ID的对应,如果用before INSERT有可能造成ID不对应 
  143. 3.如new.id则是表示主表中的字段 
  144. 4.sql语句太多,用 begin..end 
  145. 5.使用show triggers语句查看数据库中的触发器。 
  146. 6.删除触发器DROP TRIGGER IF EXISTS `test` 
  147. 7.作者:<a href="https://www.fity.cn">未来往事</a>';  
  148.   
  149. echo <<<EOT  
  150. <h3>语法:</h3>  
  151. create trigger <触发器名称>  
  152.   
  153. { before | after}  
  154.   
  155. {insert | update | delete}  
  156.   
  157. on <表名>  
  158.   
  159. for each row  
  160.   
  161. <触发器SQL语句>  
  162.   
  163. 参数详解如下:  
  164.   
  165. create trigger <触发器名称>:创建一个新触发器,并指定触发器的名称。  
  166.   
  167. { before | after}:用于指定在insert、update或delete语句执行前触发还是在语句执行后触发。  
  168.   
  169. on <表名>:用于指定响应该触发器的表名。  
  170.   
  171. for each row:触发器的执行间隔,for each row 通知触发器每隔一行执行一次动作,而不是对整个表执行一次。  
  172.   
  173. <触发器SQL语句>:触发器要执行的SQL语句,如果该触发器要执行多条SQL语句,要将多条语句放在begin…end块中。  
  174.   
  175. 如:begin…end块(它不能上phpadmin上运行。因为phpmyadmin没有对begin...end解析。)  
  176.   
  177. mysql_query(" 
  178.  
  179. create trigger user_delete 
  180.  
  181. after delete 
  182.  
  183. on user 
  184.  
  185. for each row BEGIN 
  186.  
  187. delete from user_bak where id=OLD.id; 
  188.  
  189. delete from aaa where id=OLD.id; 
  190.  
  191. END;");  
  192.   
  193.   
  194.   
  195. Copyright © <a href="https://www.fity.cn">Fity.cn</a> All Rights Reserved.  
  196.   
  197.   
  198. EOT;  
  199. ?>  
  200. </div>  
  201. </body>  
  202. </html>  

相关文章

此处评论已关闭