mysql触发器问题

现在有A、B两个表
A表中有增删改数据操作数据时,通过触发器将记录传给B表
具体代码怎么写?

1,创建触发器:t_afterinsert_on_tab1
作用:增加tab1表记录后自动将记录增加到tab2表中

CREATE TRIGGER t_afterinsert_on_tab1
AFTER INSERT ON tab1
FOR EACH ROW
BEGIN
if new.tab1_id is not null then
insert into tab2(tab2_id) values(new.tab1_id);
end if;
END;

2,创建触发器:t_afterdelete_on_tab1
作用:删除tab1表记录后自动将tab2表中对应的记录删去
CREATE TRIGGER t_afterdelete_on_tab1
AFTER DELETE ON tab1
FOR EACH ROW
BEGIN
delete from tab2 where tab2_id=old.tab1_id;
END;

2,创建触发器:t_afterupdate_on_a
作用:修改a表age字段后自动将b表中对应的age字段修改
CREATE TRIGGER t_afterupdate_on_a
AFTER UPDATE ON a
FOR EACH ROW
update b set age=NEW.age where id=NEW.id;追问

增加语句中
if new.tab1_id is not null then
insert into tab2(tab2_id) values(new.tab1_id);

是什么意思呢?

追答

这个是判断插入tab1的id字段是否空值,因为有的字段不允许为空,必须不为空才能成功向数据库中插入记录,因此先做一个判断。如果字段允许为空则可以去掉这个判断

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-05-31
给你个简单的例子
CREATE TABLE a (id int);
CREATE TABLE b(id int);

CREATE TRIGGER TG_a_INSERT AFTER INSERT ON a FOR EACH ROW
BEGIN
INSERT INTO B(id)
VALUES(NEW.id);
END

INSERT INTO a VALUES(1);

SELECT * FROM b;

+------+
| id |
+------+
| 1 |
+------+
1 row in set (0.00 sec)

可见a中插入的数据被触发到b中了
当然这是INSERT触发器
如果需要DELETE触发器,将INSERT改为DELETE,NEW改为OLD
CREATE TRIGGER TG_A_DELETE AFTER DELETE ON a FOR EACH ROW
BEGIN
INSERT INTO B(id)
VALUES(OLD.id);
END

UPDATE触发器
CREATE TRIGGER TG_A_UPDATE AFTER UPDATE ON a FOR EACH ROW
BEGIN
INSERT INTO B(id)
VALUES(OLD.id);
END
第2个回答  2011-05-31
create trigger A_Ins_Del
on A
for insert,delete
as
declare @x int,@y int
select @x=A.改变的属性 from inserted
select @y=A.改变的属性 from deleted
if(@x<>0 or @y<>0)
update B SET B.属性=B.属性+@x or update B set B.属性=B.属性-@y
else
GO
相似回答