当前位置:数据库 > MySQL >>

MYsql 触发器问题

我有6张表 a_user(userID,username,password,email,address,phone,qq,utype,nickname,grade,fuserid,dateline) b_user(userID,username,password,email,address,phone,qq,utype,nickname,grade,fuserid,dateline) c_user(userID,username,password,email,address,phone,qq,utype,nickname,grade,fuserid,dateline) d_user(userID,username,password,email,address,phone,qq,utype,nickname,grade,fuserid,dateline) e_user(userID,username,password,email,address,phone,qq,utype,nickname,grade,fuserid,dateline) f_user(userID,username,password,email,address,phone,qq,utype,nickname,grade,fuserid,dateline) g_user(userID,username,password,email,address,phone,qq,utype,nickname,grade,fuserid,dateline) 想实现 在任何一张表中 增,删,改 数据时 其它表同时更新。应该怎样定义触发器。 请附上语法,因为小弟是MYSQL菜鸟
补充:我是这样操作的 先做一个表触发其它所有表。
delimiter //
create trigger insa_user
after insert on a_user
for each row
Begin
If not exists(select new.userid from b_user where user_id=new.id) then
insert into b_user(列名,列名....) values (new.列名....)
END IF;
If not exists(select new.userid from c_user where user_id=new.id) then
insert into c_user(列名,列名....) values (new.列名....)
END IF;
If not exists(select new.userid from d_user where user_id=new.id) then
insert into d_user(列名,列名....) values (new.列名....)
END IF;
if 其它表    问题1请问这里可不可以写成一种循环?。 
end;//
delimiter ;

然后每张表都触发a_user
delimiter //
create trigger insb_user
after insert on b_user
for each row
Begin
If not exists(select new.userid from a_user where user_id=new.id) then
insert into a_user(列名,列名....) values (new.列名....)
END IF;
end;//
delimiter ;

delimiter//
..........

请问除了这种方法 还有没有更简单 直接的方法 方便于以后如果以后再增加一张表
追问:我也想过调用存储过程 但怎样把更新的表名 传入存储过程。 能否举例说明 不胜感激!!  我现在就是每张表定义触发器 都更新a_user   a_user定义的触发器更新所有表 一但有新表加入 就得删掉a_user上的触发器重建 很是麻烦谢谢你的回答,这样明显不行啊
答案:你这样明显是不行的!触发器是定义在每一张表上的,你有几个表就要在几个表上建立触发器,而且每个触发器都会不一样。你也说往后可能会增加表,万一增加了表,你之前的出发器肯定更新不到新增加的表,这样的话你就得再更新在每个表上的触发器。用触发器做这个事情....,你的思路一开始就错了。你应该用的是存储过程,存储过程要传一个参数是要更新的表名,到时候只调用存储郭晨就可以了。这只是个思路,供你参考
其他:a_user(userID,username,password,email,address,phone,qq,utype,nickname,grade,fuserid,dateline)
b_user(userID,username,password,email,address,phone,qq,utype,nickname,grade,fuserid,dateline)
c_user(userID,username,password,email,address,phone,qq,utype,nickname,grade,fuserid,dateline)
d_user(userID,username,password,email,address,phone,qq,utype,nickname,grade,fuserid,dateline)
e_user(userID,username,password,email,address,phone,qq,utype,nickname,grade,fuserid,dateline)
f_user(userID,username,password,email,address,phone,qq,utype,nickname,grade,fuserid,dateline)
g_user(userID,username,password,email,address,phone,qq,utype,nickname,grade,fuserid,dateline) Create trigger a_trigger
on database
for insert
as
     '你的sql语句'
go 

上一个:又是sql问题 求大侠解答 sql(mysql)
下一个:mysql添加记录自动100条应该怎么写啊?

Oracle
MySQL
Access
SQLServer
DB2
Excel
SQLite
SYBASE
Postgres
如果你遇到数据库难题:
请访问www.zzzyk.com 试试
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,