自動生成mysql觸發器代碼,實現數據同步

如果公司裡有上百個表要做觸發器,如果手動寫代碼的話。很累,所以今天寫瞭一個小程序,自動生成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="delphi”>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的觸發器
 

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *