以前写了一个系统,某张表A定义了一个主键比如字段名为Name,该字段又作为另外一张表B的外部关键字,以前系统中是不能修改表A的主键的,现在有一特殊的要求,在不变更以前数据库表结构的情况下需要能够修改表A的主键,请问有什么变通的实现方法?
在SQL中可以设置为级联更新,或自己写一个触发器来同步修改。
触发器方式:
create trigger trg_A
on A
for update,delete
as
begin
if exists(select 1 from inserted)
update B set Name=(select Name from inserted) where Name=(select Name from deleted)
else
delete B where Name=(select Name from deleted)
end
go
级联更新和级联删除方式:
ALTER TABLE [dbo].[T_USERGROUP] ADD
CONSTRAINT [FK_T_USERGROUP_T_ACCTTEMPLATE] FOREIGN KEY
(
[ATNAME]
) REFERENCES [dbo].[T_ACCTTEMPLATE] (
[ATNAME]
)ON UPDATE CASCADE
对于外部关键的可以采用此方法
补充: SQL数据库支持级联更新和级联删除,
Oracle不支持级联更新(为了避免死锁的问题吧可能),支持级联删除,如果需要实现级联删除只能通过触发器方式来实现