SQLServer之修改FOREIGN KEY约束

码界破浪使
• 阅读 3043

使用SSMS数据库管理工具修改FOREIGN KEY约束

1、连接数据库,选择数据表-》右键点击-》选择设计(或者展开键,选择要修改的外键,右键点击,选择修改,后面修改步骤相同)。

SQLServer之修改FOREIGN KEY约束

SQLServer之修改FOREIGN KEY约束

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

SQLServer之修改FOREIGN KEY约束

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

SQLServer之修改FOREIGN KEY约束

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

SQLServer之修改FOREIGN KEY约束

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

SQLServer之修改FOREIGN KEY约束

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

SQLServer之修改FOREIGN KEY约束

使用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

SQLServer之修改FOREIGN KEY约束

修改FOREIGN KEY优缺点

优点:

1、保证数据的完整性。

2.、关联查询时,可以用到FK 的统计信息。

3、合理使用外键,可以增加查询效率。

缺点:

1、删队或更新关联数据时需要做检查,效率会很低。

2、数据量很大,并发量很大,会影响性能。

3、外键虽然保证完整性,但是对于主表删除这种操作,都级联扫描一遍所有的子表取删除,数据越大越慢,锁粒度也会大。

4、导入导出,其它高可用等手工调数据时非常麻烦给。

点赞
收藏
评论区
推荐文章
Easter79 Easter79
3年前
sqlserver字符集问题(中文出乱码,排序错误等)
在创建sqlserver 数据库时未指定排序字符集,databases则会使用instances的排序规则。为了支持中文,需要设置成Chinese\_PRC\_CI\_AS。(1)通过sql脚本修改\修改现有databases的排序规则ALTERDATABASEmydbCOLLATEChinese\_PRC\_CI\_AS(2)通过
Wesley13 Wesley13
3年前
SQL删除外键约束
!(http://static.oschina.net/uploads/img/201402/18090426_A9Vs.jpg)  使用如下SQL语句查询出表中外键约束名称:1selectname2fromsys.foreign_key_columnsfjoinsys.objectsoonf.cons
CuterCorley CuterCorley
4年前
数据库编程 MySQL 技巧与经验
1.MySQL创建数据表时设定引擎并添加外键约束创建两个数据表,在它们之间添加外键约束,然后在被添加外键的表中添加数据,发现并没有提示报错,很正常地插入了数据,说明外键没有添加成功,在SQL可视化工具里查看表的属性,并点击外部键会出现弹窗,提示是因为引擎的问题,导致不能添加外键。MySQL安装时默认用的表引擎是MyISAM,而MyISAM是不支持外键的,如
Easter79 Easter79
3年前
SQL Server配置Oracle链接服务器
1、在SQLServer服务器上安装Oracle客户端。安装时选择定制,勾选如下选项:!(https://static.oschina.net/uploads/space/2016/1213/105827_6YGf_921036.png)2、导入注册表项目,在服务器上新建文本保存以下内容后修改后缀为reg,然后运行。WindowsRe
Stella981 Stella981
3年前
Idea 快捷键(自定义后)
自定义MAC的键盘布局!键盘设置(https://static.oschina.net/uploads/img/201706/13002340_zKIl.png)以上修改,最主要是将将MAC键盘中的操作按键修改为ctrl键。自定义idea快捷键选择IntelliJIDEA
Wesley13 Wesley13
3年前
MySQL创建表时加入的约束以及外键约束的的意义
1,创建表时加入的约束a) 非空约束,notnullb) 唯一约束,uniquec) 主键约束,primarykeyd) 外键约束,foreignkey1,非空约束,针对某个字段设置其值不为空,如:学生的姓名不能为空droptableifexistst_studen
Wesley13 Wesley13
3年前
MongoDB学习系列11:MongoDB中的修改器
使用修改器时,"\_id"的值不能改变,而整个文档在替换时是可以改变"\_id"的。$set用来修改一个键的值。$unset用来删除一个键。$inc用来增加已有键的值,或者在键不存在时创建一个键。只能用于整数、长整数、或者双精度浮点数。$push往数组里添加东西,$pop从数组中删除元素。{$pop:{key:1}}从数据末
Wesley13 Wesley13
3年前
MySQL中添加、删除约束
MySQL中6种常见的约束:主键约束(primarykey)、外键约束(foreignkey)、非空约束(notnull)、唯一性约束(unique)、默认值约束(defualt)、自增约束(aoto\_increment),下面是添加、删除这几种约束的一些方法。\我已经建了数据库;1\添加约束21、建表时添加约
Wesley13 Wesley13
3年前
Oracle修改主键约束
  项目需求,有张表,原有三个联合主键,现在需要再加一个字段进去,而恰恰这个字段可以为空的。去数据库捞了一把,还好数据都不为空:SQLselectcount()fromt_wlf_recordtwheret.acceptinvitetimeisnull;COUNT()
Wesley13 Wesley13
3年前
mysql 表的完整性约束
mysql表的完整性约束阅读目录  概览  notnull  unique  primarykey  foreignkey概览  为了防止不符合规范的数据进入数据库,在用户对数据进行插入、修改、删除等操作
Wesley13 Wesley13
3年前
IOS 修改工程名称,项目名称
第一步:修改工程文件夹名称!\(http://static.oschina.net/uploads/img/201510/28131440_z7DK.png)第二步:打开新文件夹,将.xcodeproj更名,右键点击.xcodeproj并选择Showpackagecontents,弹出一个对话框包含了几个文件.(事实上.xcodeproj是这