SQL Server作为一个关系数据库,存放着大量的主从关系表。从表通过外键与主表进行关联。当删除主表数据时,会提示类似“DELETE 语句与 REFERENCE 约束"FK_T计件工资_T窑炉生产记录单"冲突。”的消息,表示有从表数据与此条数据关联,不能删除。要删掉主表数据,必须先删除相关的从表数据,这就是所谓的级联删除,同理,级联更新就是更改主表的主键数据时,应同时更改从表对应的外键数据。
级联更新、删除可以通过以下两种方法实现:
方法一、在表关系中设置级联关系,由数据库引擎自动管理
1.1在management studio中手动设置
在management studio中,打开对应数据库的数据库关系图,在相关表的任意一张上右键,选择“关系”。在左侧选定相应关系,然后将更新规则、删除规则设为“级联”,关闭对话框后保存数据库关系图。
1.2用SQL语句设置级联关系
- alter table T窑炉生产记录单
- add constraint FK_T窑炉生产记录单_T缺陷 foreign key (窑炉生产记录单编号)
- references T窑炉生产记录单_缺陷 (窑炉生产记录单编号)
- on update cascade on delete cascade
方法二、update、delete结合inner join语句进行相关操作
原理:inner join语句生成了一个类似临时表的数据选择范围。
2.1update结合inner join实现更新
- update T窑炉生产记录单_缺陷
- set 缺陷数量=缺陷数量+1
- from T窑炉生产记录单 a inner join
- T窑炉生产记录单_缺陷 b on a.窑炉生产记录单编号=b.窑炉生产记录单编号
- where a.出窑日期='2015/1/1'
2.2delete结合inner join实现删除
- delete from T窑炉生产记录单_缺陷
- from T窑炉生产记录单 a inner join
- T窑炉生产记录单_缺陷 b on a.窑炉生产记录单编号=b.窑炉生产记录单编号
- where a.出窑日期='2015/1/1'
因为业务关系的复杂性,在实际工作中,大部分采取的第二种方法。如果业务关系简单,可以采用第一种方法,简单并且执行效率要高一些。
- 工资小程序
- 员工工资查询小程序
- 我的微信公众号
- 我的微信公众号扫一扫
评论