如何修改数据库主键

 以前写了一个系统,某张表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不支持级联更新(为了避免死锁的问题吧可能),支持级联删除,如果需要实现级联删除只能通过触发器方式来实现

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值