视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
自动生成mysql触发器代码,实现数据同步_MySQL
2020-11-09 18:06:15 责编:小采
文档

bitsCN.com

如果公司里有上百个表要做触发器,如果手动写代码的话。很累,所以今天写了一个小程序,自动生成mysql的触发代码。
$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 = "

{$tab1}表的insert触发器

";
$inser_str .= "create trigger ".$tab1."_insert
AFTER INSERT
on ".$tab1."
";
$inser_str .="for each row
INSERT INTO {$tab2} (".rtrim($str1,,).) VALUES (.rtrim($str2,,).);;
//update触发器
$update_str = "

{$tab1}表的update触发器

";
$update_str .= "create trigger ".$tab1."_update
";
$update_str .= "after update
";
$update_str .= "on ".$tab1.
;
$update_str .= "for each row
";
$update_str .= "update ".$tab2." set ".rtrim($str3,,)." where id = new.id;//这里的where id = new.id要手动改一下。改成主键的字段名";
//delete触发器
$delete_str = "

{$tab1}表的delete触发器

";
$delete_str .= "create trigger ".$tab1."_delete
";
$delete_str .= "after delete
";
$delete_str .= "on ".$tab1."
";
$delete_str .= "for each row
";
$delete_str .= "delete from ".$tab2." where id=OLD.id//这里的where id = new.id要手动改一下。改成主键的字段名
";
echo $inser_str;
echo $update_str;
echo $delete_str;
echo

注意:
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.作者:华夏之星;
echo <<

语法:


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;");



EOT;
?>
PHP与MYSQL的触发器

bitsCN.com

下载本文
显示全文
专题