使用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. Python内置函数(37)——len

    英文文档: len(s) Return the length (the number of items) of an object. The argument may be a sequence (s ...

  2. 网络协议 2 - IP 是怎么来,又是怎么没的?

    了解完网络协议,我们会发现,网络通信的五层模型里,有两个很重要的概念:IP 地址和 MAC 地址. 那么 IP 地址是怎么来的,又是怎么没的?MAC 地址与 IP 地址又有什么区别? 这回答上面问题前 ...

  3. Kafka从入门到进阶

    1.  Apache Kafka是一个分布式流平台 1.1  流平台有三个关键功能: 发布和订阅流记录,类似于一个消息队列或企业消息系统 以一种容错的持久方式存储记录流 在流记录生成的时候就处理它们 ...

  4. Linq使用Group By

    1.简单形式: var q = from p in db.Products group p by p.CategoryID into g select g; 语句描述:Linq使用Group By按C ...

  5. mysql 架构篇系列 4 复制架构一主一从搭建(半同步复制)

    一.概述 在mysql 5.5之前,mysql 的复制是异步操作,主库和从库的数据之间存在一定的延时,这样存在一个隐患:当主库上写入一个事务并提交成功,而从库尚未得到主库推送的Binlog日志时,主库 ...

  6. Android中广播接收者BroadcastReceiver详解

    1. 接收系统的广播步骤 (1)  新建一个类继承BroadcastReceiver 以监听sd卡状态的广播接收者为例 public class SdCardBroadcastReceiver ext ...

  7. centos系统安装第三方源EPEL

    epel没安装呗 相当于扩展型软件仓库,EPEL (Extra Packages for Enterprise Linux,企业版Linux的额外软件包) 是Fedora小组维护的一个软件仓库项目,为 ...

  8. MaxCompute安全管理指南-基础篇

    背景及目的 方便和辅助MaxCompute的project owner或安全管理员进行project的日常安全运维,保障数据安全. MaxCompute有安全模型,DataWorks也有安全模型,当通 ...

  9. Java线程创建形式 Thread构造详解 多线程中篇(五)

    Thread作为线程的抽象,Thread的实例用于描述线程,对线程的操纵,就是对Thread实例对象的管理与控制. 创建一个线程这个问题,也就转换为如何构造一个正确的Thread对象. 构造方法列表 ...

  10. spring原理案例-基本项目搭建 03 创建工程运行测试 spring ioc原理实例示例

    下面开始项目的搭建 使用 Java EE - Eclipse 新建一 Dynamic Web Project Target Runtime 选 Apache Tomcat 7.0(不要选 Apache ...