SQL Server级联更新、删除

inner join

SQL Server作为一个关系数据库,存放着大量的主从关系表。从表通过外键与主表进行关联。当删除主表数据时,会提示类似“DELETE 语句与 REFERENCE 约束"FK_T计件工资_T窑炉生产记录单"冲突。”的消息,表示有从表数据与此条数据关联,不能删除。要删掉主表数据,必须先删除相关的从表数据,这就是所谓的级联删除,同理,级联更新就是更改主表的主键数据时,应同时更改从表对应的外键数据。

级联更新、删除可以通过以下两种方法实现:

方法一、在表关系中设置级联关系,由数据库引擎自动管理

1.1在management studio中手动设置

在management studio中,打开对应数据库的数据库关系图,在相关表的任意一张上右键,选择“关系”。在左侧选定相应关系,然后将更新规则、删除规则设为“级联”,关闭对话框后保存数据库关系图。

手动设置级联关系

1.2用SQL语句设置级联关系

  1. alter table T窑炉生产记录单
  2.  add constraint FK_T窑炉生产记录单_T缺陷 foreign key (窑炉生产记录单编号)
  3.  references T窑炉生产记录单_缺陷 (窑炉生产记录单编号)
  4.  on update cascade on delete cascade

方法二、update、delete结合inner join语句进行相关操作

原理:inner join语句生成了一个类似临时表的数据选择范围。

2.1update结合inner join实现更新

  1. update T窑炉生产记录单_缺陷
  2. set 缺陷数量=缺陷数量+1
  3. from T窑炉生产记录单 a inner join
  4. T窑炉生产记录单_缺陷 b on a.窑炉生产记录单编号=b.窑炉生产记录单编号
  5. where a.出窑日期='2015/1/1'

2.2delete结合inner join实现删除

  1. delete from T窑炉生产记录单_缺陷
  2. from T窑炉生产记录单 a inner join
  3. T窑炉生产记录单_缺陷 b on a.窑炉生产记录单编号=b.窑炉生产记录单编号
  4. where a.出窑日期='2015/1/1'

因为业务关系的复杂性,在实际工作中,大部分采取的第二种方法。如果业务关系简单,可以采用第一种方法,简单并且执行效率要高一些。

  • 工资小程序
  • 员工工资查询小程序
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin
avatar

发表评论

您必须登录才能发表评论!