日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

php自动生成mysql的触发代码。

發(fā)布時間:2023/12/9 数据库 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php自动生成mysql的触发代码。 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
php自動生成mysql的觸發(fā)代碼。

如果公司里有上百個表要做觸發(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ā)器

posted on 2016-03-10 09:47 jason&li 閱讀(...) 評論(...) 編輯 收藏

轉(zhuǎn)載于:https://www.cnblogs.com/ldms/p/5260660.html

總結

以上是生活随笔為你收集整理的php自动生成mysql的触发代码。的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。