SQL触发器 自动更新子表
主表:订单表 Order
orderID、 date 、 N (orderID为主键)
1 2010-01-23 .
2 2010-01-24 .
3 2010-01-25 .
4 2010-01-26 .
5 2010-01-27 .
子表:订单明细表OrderDetail
orderID、 材料编号、数量、单价
1 ZL001 23 23.2
1 ZL001 23 23.2
2 ZL001 23 23.2
2 ZL001 23 23.2
3 ZL001 27 23.1
4 ZL001 12 23.2
4 ZL001 3 23.0
4 ZL001 23 23.2
想实现:当我更新主表中的orderID后,子表订单明细表的 orderID也跟着修改。
我自己写了触发器,但有问题更新主表的orderID后,单明细表的 orderID没有跟着修改
create trigger Order_Trigger on Order
for update
as
begin
set nocount on
declare @id int
select @id=Orderid from inserted
begin
update OrderDetail set Orderid=@id where Orderid=(select Orderid from inserted)
end
end
恳求各位大虾帮忙,指点错误在那? 或有其他更好的方法来实现
方案一,直接修改表的约束为外键约束。这样当主表中的主键变化后,子表中会自动更新。
引用
13.6.4.4. FOREIGN KEY Constraints
InnoDB supports foreign key constraints. The syntax for a foreign key constraint definition in InnoDB looks like this:
[CONSTRAINT [symbol]] FOREIGN KEY
[index_name] (index_col_name, …)
REFERENCES tbl_name (index_col_name,…)
[ON DELETE reference_option]
[ON UPDATE reference_option]
reference_option:
RESTRICT | CASCADE | SET NULL | NO ACTION
方法二,使用触发器。
-
SQL code
delimiter | CREATE TRIGGER Order_Trigger AFTER UPDATE ON `Order` FOR EACH ROW BEGIN UPDATE OrderDetail SET Orderid=NEW.Orderid WHERE Orderid=OLD.Orderid ; END; | delimiter ;
where current of cur_bbb
这句没看明白啊
orderID不应该修改的。主键无需修改。你担心数字上限?
简答的问题复杂化?