php自动生成mysql的触发代码。
如果公司里有上百個表要做觸發(fā)器,如果手動寫代碼的話。很累,所以今天寫了一個小程序,
<?php
$dbname = 'test';//數(shù)據(jù)庫
$tab1 = 'user'; //執(zhí)行的表
$tab2 = 'user_bak'; //被觸發(fā)的表
$conn = mysql_connect("localhost","root", "root",$dbname) or die("請檢查你的主機名數(shù)據(jù)庫用戶名和密碼");
mysql_select_db($dbname, $conn) or die("數(shù)據(jù)庫還沒有連接");
$query = mysql_query("SHOW COLUMNS FROM $tab1");mysql_query("");
while($row=mysql_fetch_array($query,MYSQL_NUM)){//得到表的字段數(shù)組
$temp[] = $row[0];
$str1 .=? '`'.$row[0].'`,';
$str2 .=? 'new.'.$row[0].',';
$str3 .=? $row[0].'=new.'.$row[0].',';
}
//insert觸發(fā)器
$inser_str? = "<h1>{$tab1}表的insert觸發(fā)器</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觸發(fā)器
$update_str? = "<h1>{$tab1}表的update觸發(fā)器</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觸發(fā)器
$delete_str?? = "<h1>{$tab1}表的delete觸發(fā)器</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.觸發(fā)器可用于InnoDB或MyISAM類型的表<br>2.插入的時候用AFTER INSERT 更好的保證數(shù)據(jù)ID的對應,如果用before INSERT有可能造成ID不對應<br>3.如new.id則是表示主表中的字段<br>4.sql語句太多,用 begin..end<br>5.使用show triggers語句查看數(shù)據(jù)庫中的觸發(fā)器。<br>6.刪除觸發(fā)器DROP TRIGGER IF EXISTS `test`<br>7.作者:<a href="http://hi.baidu.com/woaidelphi">華夏之星</a>';
echo <<<EOT
<h3>語法:</h3>
create trigger <觸發(fā)器名稱><br>
{ before | after}<br>
{insert | update | delete}<br>
on <表名><br>
for each row<br>
<觸發(fā)器SQL語句><br>
參數(shù)詳解如下:<br>
create trigger <觸發(fā)器名稱>:創(chuàng)建一個新觸發(fā)器,并指定觸發(fā)器的名稱。<br>
{ before | after}:用于指定在insert、update或delete語句執(zhí)行前觸發(fā)還是在語句執(zhí)行后觸發(fā)。<br>
on <表名>:用于指定響應該觸發(fā)器的表名。<br>
for each row:觸發(fā)器的執(zhí)行間隔,for each row 通知觸發(fā)器每隔一行執(zhí)行一次動作,而不是對整個表執(zhí)行一次。<br>
<觸發(fā)器SQL語句>:觸發(fā)器要執(zhí)行的SQL語句,如果該觸發(fā)器要執(zhí)行多條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的觸發(fā)器
轉(zhuǎn)載于:https://www.cnblogs.com/ldms/p/5260660.html
總結
以上是生活随笔為你收集整理的php自动生成mysql的触发代码。的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: easyui模版html,EasyUI
- 下一篇: mcgs组态连接oracle数据库,昆仑