使用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约束的更多相关文章

  1. 可能会导致循环或多重级联路径。请指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN KEY 约束。

    错误提示:可能会导致循环或多重级联路径.请指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN KEY 约束. 原因:自表连接(同一张表 ...

  2. C# json反序列化 对象中嵌套数组 (转载) 可能会导致循环或多重级联路径。请指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN KEY 约束。

    C# json反序列化 对象中嵌套数组 (转载)   看图: 这里可以看到是二层嵌套!!使用C#如何实现?? 思路:使用list集合实现 → 建立类 → list集合 → 微软的   Newtonso ...

  3. SQLServer之FOREIGN KEY约束

    FOREIGN KEY约束添加规则 1.外键约束并不仅仅可以与另一表的主键约束相链接,它还可以定义为引用另一个表中 UNIQUE 约束的列. 2.如果在 FOREIGN KEY 约束的列中输入非 NU ...

  4. SQLServer 中有五种约束, Primary Key 约束、 Foreign Key 约束、 Unique 约束、 Default 约束和 Check 约束

    一直在关注软件设计方面,数据库方面就忽略了很多,最近在设计数据库时遇到了一些小麻烦,主要是数据库中约束和性能调优方面的应用,以前在学习 Sql Server 2000,还有后来的 Sql Server ...

  5. sqlserver truncate清空表时候,无法删除 'B表',因为该表正由一个 FOREIGN KEY 约束引用。

    外键: 查询:select object_name(a.parent_object_id) 'tables'  from sys.foreign_keys a  where a.referenced_ ...

  6. SQL Server 2008 R2——TRUNCATE TABLE 无法截断表 该表正由 FOREIGN KEY 约束引用

    =================================版权声明================================= 版权声明:原创文章 禁止转载  请通过右侧公告中的“联系邮 ...

  7. SQL PRIMARY KEY 约束\SQL FOREIGN KEY 约束\SQL CHECK 约束

    SQL PRIMARY KEY 约束 PRIMARY KEY 约束唯一标识数据库表中的每条记录. 主键必须包含唯一的值. 主键列不能包含 NULL 值. 每个表都应该有一个主键,并且每个表只能有一个主 ...

  8. 无法删除对象 '产品',因为该对象正由一个 FOREIGN KEY 约束引用。

    在删除northwindcs表时,发生报错,消息 3726,级别 16,状态 1,第 2 行,无法删除对象 '产品',因为该对象正由一个 FOREIGN KEY 约束引用.此时判断是因为有其他表的外键 ...

  9. 删除提示 FOREIGN KEY 约束引用”

    有时想删除某个表时,提示“无法删除对象 'Orders',因为该对象正由一个 FOREIGN KEY 约束引用”,原因很简单不要急躁,它被其它表的外键引用了,所以无法删除,在此只需先找到哪些表的外键引 ...

随机推荐

  1. webdav 概览

    webdav 概览 WebDav(Web Distributed Authoring and Versioning) 是一个控制远端Web资源的协议,它基于HTTP1.1.它的定义在RFC 4918( ...

  2. asp.net core 系列 17 通用主机 IHostBuilder

    一.概述 ASP.NET Core 通用主机 (HostBuilder),该主机对于托管不处理 HTTP 请求的应用非常有用.通用主机的目标是将 HTTP 管道从 Web 主机 API 中分离出来,从 ...

  3. 为啥用ip不可以访问知乎,而百度却可以?

    我们先来ping知乎的域名,然后可以得到响应的服务器的ip 之后我们用浏览器来访问这个ip,结果如下 被拒绝访问了. 而用ip来访问百度,则没啥问题,如图 访问知乎的时候,域名可以访问,ip不可以访问 ...

  4. ASP.NET Core框架揭秘(持续更新中…)

    之前写了一系列关于.NET Core/ASP.NET Core的文章,但是大都是针对RC版本.到了正式的RTM,很多地方都发生了改变,所以我会将之前发布的文章针对正式版本的.NET Core 1.0进 ...

  5. docker 安装LAMP环境

    LAMP:Linux.Apache.MySQL.PHP docker hub 上会有配好的LAMP环境docker,部署到本地并运行起来 sudo docker pull linode/lamp 然后 ...

  6. 教你MySQL Binlog实用攻略

    本文由云+社区发表 1.概述 binlog是Mysql sever层维护的一种二进制日志,与innodb引擎中的redo/undo log是完全不同的日志:其主要是用来记录对mysql数据更新或潜在发 ...

  7. [三]java8 函数式编程Stream 概念深入理解 Stream 运行原理 Stream设计思路

    Stream的概念定义   官方文档是永远的圣经~     表格内容来自https://docs.oracle.com/javase/8/docs/api/   Package java.util.s ...

  8. Linux之安装常用软件

    Linux下安装软件的方法: 1,rpm(不推荐使用) 2,yum安装(使用快捷方便) 3,编译安装 一.安装python3(这里使用的是编译安装) 1,下载python3源码包 在centos下,第 ...

  9. VS项目发布到本地IIS

    一.项目介绍 ①web项目,开发工具Visual Studio,语言C# ②本地IIS,手机上或其他用户在和本地在同一个局域网(并不绝对是指同一个WIFI)内访问,同时要把防火墙关掉 ③IIS全名In ...

  10. js中获取URL参数的共通方法getRequest()方法

    getRequest : function() { var url = location.search; //获取url中"?"符后的字串 var theRequest = new ...