SQL触发器 自动更新子表,该如何解决

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不应该修改的。主键无需修改。你担心数字上限?

简答的问题复杂化?
SQL触发器 自动更新子表,该如何解决

相关文章:

你感兴趣的文章:

标签云: