SQLServer之修改FOREIGN KEY约束
使用SSMS数据库管理工具修改FOREIGN KEY约束
1、连接数据库,选择数据表-》右键点击-》选择设计(或者展开键,选择要修改的外键,右键点击,选择修改,后面修改步骤相同)。


2、在表设计窗口中-》选择要修改的外键列-》右键点击-》选择关系。

3、在外键关系弹出框中-》选中要修改的外键-》点击修改表和列规范。

4、在表和列弹出框中-》输入要修改的外建名-》选择要修改的主键基表-》选择要修改的主键基表的数据列-》选择要修改的外键基表-》选择要修改的外键基表数据列-》点击确定。

5、在外键关系弹出框中-》输入要修改的外键名称-》输入要修改的外键描述-》表设计规则可根据实际情况选择-》点击关闭。

6、点击保存(或者ctrl+s)-》关闭表设计器-》刷新表-》打开外键查看修改结果。

使用T-SQL脚本修改FOREIGN KEY约束
若要使用Transact-SQL修改FOREIGN KEY约束,必须先删除现有的FOREIGN KEY约束,然后再用新定义重新创建该约束。
语法:
--声明数据库
use 数据库名;
go
--判断如果存在外键则删除
if exists(select * from sysobjects where name=约束名)
alter table 表名 drop constraint 约束名;
go
--添加外键约束
alter table 表名 --外键基表,显示哪个表包含用作所选关系中外键的列。
[with check | with nocheck] --强制用于复制,指示当复制代理对此表执行插入、更新或删除操作时是否强制约束。
add constraint 约束名--标识类别,外键名称。
foreign key(列名) --外键列,显示哪个列用作所选关系的外键。
references 表名--主/唯一键基表,显示哪个表包含用作所选关系中主键(或唯一键)的列。
(列名) --主/唯一键列,显示哪个列用作所选关系的主键(或唯一键)。
--更新规则
--no action:不执行任何操作,错误消息告知用户不允许进行更新并将回滚 UPDATE。
--cascade:级联,更新所有包含外键关系所涉及数据的行。 如果该表将包含在使用逻辑记录的合并发布中,则不要指定 CASCADE。
--set null:设置null,如果表的所有外键列都可接受 Null 值,则将该值设置为 Null。
--set default:设置默认值,如果表的所有外键列均已定义默认值,则将值设置成为该列定义的默认值。
on update [no action | cascade | set null | set default]
--删除规则
--no action:不执行任何操作,错误消息告知用户不允许进行删除并将回滚 DELETE。
--cascade:级联,删除所有包含外键关系所涉及数据的行。 如果该表将包含在使用逻辑记录的合并发布中,则不要指定 CASCADE。
--set null:设置null,如果表的所有外键列都可接受 Null 值,则将该值设置为 Null。
--set default:设置默认值,如果表的所有外键列均已定义默认值,则将值设置成为该列定义的默认值。
on delete [no action | cascade | set null | set default]
go
--强制外键约束
--指示如果对关系中列数据的更改会使外键关系的完整性失效,是否允许进行这样的更改。 如果不允许这样的更改,则选择 “是” ;如果允许这样的更改,则选择 “否” 。
alter table 表名 [nocheck | check] constraint 约束名;
go
--添加外键约束描述
execute sp_addextendedproperty N'MS_Description',N'约束描述',N'schema',N'dbo',N'table',N'表名',N'constraint',N'约束名';
go
示例:
--声明数据库
use testss;
go
--判断如果存在外键则删除
if exists(select * from sysobjects where name='foreign1')
alter table test1 drop constraint foreign1;
go
--添加外键约束
alter table test1 --外键基表,显示哪个表包含用作所选关系中外键的列。
with check --强制用于复制,指示当复制代理对此表执行插入、更新或删除操作时是否强制约束。
add constraint foreign1 --标识类别,外键名称。
foreign key(classid) --外键列,显示哪个列用作所选关系的外键。
references test2 --主/唯一键基表,显示哪个表包含用作所选关系中主键(或唯一键)的列。
(id) --主/唯一键列,显示哪个列用作所选关系的主键(或唯一键)。
--更新规则
--no action:不执行任何操作,错误消息告知用户不允许进行更新并将回滚 UPDATE。
--cascade:级联,更新所有包含外键关系所涉及数据的行。 如果该表将包含在使用逻辑记录的合并发布中,则不要指定 CASCADE。
--set null:设置null,如果表的所有外键列都可接受 Null 值,则将该值设置为 Null。
--set default:设置默认值,如果表的所有外键列均已定义默认值,则将值设置成为该列定义的默认值。
on update cascade
--删除规则
--no action:不执行任何操作,错误消息告知用户不允许进行删除并将回滚 DELETE。
--cascade:级联,删除所有包含外键关系所涉及数据的行。 如果该表将包含在使用逻辑记录的合并发布中,则不要指定 CASCADE。
--set null:设置null,如果表的所有外键列都可接受 Null 值,则将该值设置为 Null。
--set default:设置默认值,如果表的所有外键列均已定义默认值,则将值设置成为该列定义的默认值。
on delete cascade
go
--强制外键约束
--指示如果对关系中列数据的更改会使外键关系的完整性失效,是否允许进行这样的更改。 如果不允许这样的更改,则选择 “是” ;如果允许这样的更改,则选择 “否” 。
alter table test1 nocheck constraint foreign1;
go
--添加外键约束描述
execute sp_addextendedproperty N'MS_Description',N'修改外键约束',N'schema',N'dbo',N'table',N'test1',N'constraint',N'foreign1';
go

修改FOREIGN KEY优缺点
优点:
1、保证数据的完整性。
2.、关联查询时,可以用到FK 的统计信息。
3、合理使用外键,可以增加查询效率。
缺点:
1、删队或更新关联数据时需要做检查,效率会很低。
2、数据量很大,并发量很大,会影响性能。
3、外键虽然保证完整性,但是对于主表删除这种操作,都级联扫描一遍所有的子表取删除,数据越大越慢,锁粒度也会大。
4、导入导出,其它高可用等手工调数据时非常麻烦给。
SQLServer之修改FOREIGN KEY约束的更多相关文章
- 可能会导致循环或多重级联路径。请指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN KEY 约束。
错误提示:可能会导致循环或多重级联路径.请指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN KEY 约束. 原因:自表连接(同一张表 ...
- C# json反序列化 对象中嵌套数组 (转载) 可能会导致循环或多重级联路径。请指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN KEY 约束。
C# json反序列化 对象中嵌套数组 (转载) 看图: 这里可以看到是二层嵌套!!使用C#如何实现?? 思路:使用list集合实现 → 建立类 → list集合 → 微软的 Newtonso ...
- SQLServer之FOREIGN KEY约束
FOREIGN KEY约束添加规则 1.外键约束并不仅仅可以与另一表的主键约束相链接,它还可以定义为引用另一个表中 UNIQUE 约束的列. 2.如果在 FOREIGN KEY 约束的列中输入非 NU ...
- SQLServer 中有五种约束, Primary Key 约束、 Foreign Key 约束、 Unique 约束、 Default 约束和 Check 约束
一直在关注软件设计方面,数据库方面就忽略了很多,最近在设计数据库时遇到了一些小麻烦,主要是数据库中约束和性能调优方面的应用,以前在学习 Sql Server 2000,还有后来的 Sql Server ...
- sqlserver truncate清空表时候,无法删除 'B表',因为该表正由一个 FOREIGN KEY 约束引用。
外键: 查询:select object_name(a.parent_object_id) 'tables' from sys.foreign_keys a where a.referenced_ ...
- SQL Server 2008 R2——TRUNCATE TABLE 无法截断表 该表正由 FOREIGN KEY 约束引用
=================================版权声明================================= 版权声明:原创文章 禁止转载 请通过右侧公告中的“联系邮 ...
- SQL PRIMARY KEY 约束\SQL FOREIGN KEY 约束\SQL CHECK 约束
SQL PRIMARY KEY 约束 PRIMARY KEY 约束唯一标识数据库表中的每条记录. 主键必须包含唯一的值. 主键列不能包含 NULL 值. 每个表都应该有一个主键,并且每个表只能有一个主 ...
- 无法删除对象 '产品',因为该对象正由一个 FOREIGN KEY 约束引用。
在删除northwindcs表时,发生报错,消息 3726,级别 16,状态 1,第 2 行,无法删除对象 '产品',因为该对象正由一个 FOREIGN KEY 约束引用.此时判断是因为有其他表的外键 ...
- 删除提示 FOREIGN KEY 约束引用”
有时想删除某个表时,提示“无法删除对象 'Orders',因为该对象正由一个 FOREIGN KEY 约束引用”,原因很简单不要急躁,它被其它表的外键引用了,所以无法删除,在此只需先找到哪些表的外键引 ...
随机推荐
- webdav 概览
webdav 概览 WebDav(Web Distributed Authoring and Versioning) 是一个控制远端Web资源的协议,它基于HTTP1.1.它的定义在RFC 4918( ...
- asp.net core 系列 17 通用主机 IHostBuilder
一.概述 ASP.NET Core 通用主机 (HostBuilder),该主机对于托管不处理 HTTP 请求的应用非常有用.通用主机的目标是将 HTTP 管道从 Web 主机 API 中分离出来,从 ...
- 为啥用ip不可以访问知乎,而百度却可以?
我们先来ping知乎的域名,然后可以得到响应的服务器的ip 之后我们用浏览器来访问这个ip,结果如下 被拒绝访问了. 而用ip来访问百度,则没啥问题,如图 访问知乎的时候,域名可以访问,ip不可以访问 ...
- ASP.NET Core框架揭秘(持续更新中…)
之前写了一系列关于.NET Core/ASP.NET Core的文章,但是大都是针对RC版本.到了正式的RTM,很多地方都发生了改变,所以我会将之前发布的文章针对正式版本的.NET Core 1.0进 ...
- docker 安装LAMP环境
LAMP:Linux.Apache.MySQL.PHP docker hub 上会有配好的LAMP环境docker,部署到本地并运行起来 sudo docker pull linode/lamp 然后 ...
- 教你MySQL Binlog实用攻略
本文由云+社区发表 1.概述 binlog是Mysql sever层维护的一种二进制日志,与innodb引擎中的redo/undo log是完全不同的日志:其主要是用来记录对mysql数据更新或潜在发 ...
- [三]java8 函数式编程Stream 概念深入理解 Stream 运行原理 Stream设计思路
Stream的概念定义 官方文档是永远的圣经~ 表格内容来自https://docs.oracle.com/javase/8/docs/api/ Package java.util.s ...
- Linux之安装常用软件
Linux下安装软件的方法: 1,rpm(不推荐使用) 2,yum安装(使用快捷方便) 3,编译安装 一.安装python3(这里使用的是编译安装) 1,下载python3源码包 在centos下,第 ...
- VS项目发布到本地IIS
一.项目介绍 ①web项目,开发工具Visual Studio,语言C# ②本地IIS,手机上或其他用户在和本地在同一个局域网(并不绝对是指同一个WIFI)内访问,同时要把防火墙关掉 ③IIS全名In ...
- js中获取URL参数的共通方法getRequest()方法
getRequest : function() { var url = location.search; //获取url中"?"符后的字串 var theRequest = new ...