【你也能从零基础学会网站开发】 SQL Server结构化查询语言数据操作应用--DML篇 如果删除一个表的FOREIGN KEY 约束名称会怎么样?

🚀 个人主页 极客小俊
✍🏻 作者简介:程序猿、设计师、技术分享
🐋 希望大家多多支持, 我们一起学习和进步!
🏅 欢迎评论 ❤️点赞💬评论 📂收藏 📂加关注

其实关于这个FOREIGN KEY 约束命名的问题,我早就想和大家说了, 只是一直没有机会~~

今天我们就简单的讨论一下,~~

我发现很多人在定义这个FOREIGN KEY约束的时候,没有去定义名称~

因为有的时候,我们可能需要去删除FOREIGN KEY但是,如果我们之前定义过FOREIGN KEY约束 其实数据库系统会自动帮我们生成一个FOREIGN KEY约束名称 这个名称很不好记忆~~

举个栗子

假设这里我们给一个多对多关系的第三张表S_C添加两个外键约束作为其他两个表的关联!

如下

ALTER TABLE S_C ADD FOREIGN KEY (StudentID) REFERENCES Students(StudentID)
ALTER TABLE S_C ADD FOREIGN KEY (CourseID) REFERENCES Courses(CourseID)

如图

这样添加外键没什么问题,我们也可以在企业管理器中的表关系里面查看到现在表之间的关联!

如图

这都是没什么问题,但是如果有一天,要删除S_C其他这两个表的外键关联 怎么办?

之前说过语法如下:

ALTER TABLE 表名称 DROP CONSTRAINT 外键名称

那么 这里的外键名称这么获取呢? 你有没有想过? 如果你不知道这个名称 是不能正确去删除外键约束

SQL Server 2000中其实我们可以通过一段SQL查询来获取到这个S_C表的外键约束名称!

语法如下

SELECT c.constraint_name, c.constraint_type FROM information_schema.table_constraints c 
WHERE c.table_name = '表名称' AND c.constraint_type = 'FOREIGN KEY'

如图

从查询到的结果上看,数据库系统给我们生成的外键名称是真的, 不好记啊!!

所以我们平常在创建外键约束的时候一定要记住,要命名!

如下

ALTER TABLE 子表名称 ADD CONSTRAINT 外键约束名称 FOREIGN KEY (子表字段名称) REFERENCES 主表名称(主表字段名称)

但是如果说现在已经存在了外键,你直接使用这句话去修改外键约束名称 是不行的 只会叠加

不信我们试试看!

如下

ALTER TABLE S_C ADD CONSTRAINT test1 FOREIGN KEY (StudentID) REFERENCES Students(StudentID)
ALTER TABLE S_C ADD CONSTRAINT test2 FOREIGN KEY (CourseID) REFERENCES Courses(CourseID)

如图

看到了吧, 在这里我们使用修改语句定义的外键名称会多出两个,这样我们在删除外键的时候 到底删除哪个呢?

我们也来试试看!

ALTER TABLE S_C DROP CONSTRAINT FK__S_C__StudentID__693CA210
ALTER TABLE S_C DROP CONSTRAINT FK__S_C__CourseID__6A30C649

如图


我们把系统给我们自动生成的外键名删除了,但是有没有影响到表之间的关系呢?

我们可以回到企业管理器中去查看一下表关系结构!

如图

那么这里说明表关系结构还是存在的, 所以我建议在自己定义外键名之前,把之前系统创建的都先删除一下,然后重新创建!

sql

ALTER TABLE S_C DROP CONSTRAINT test1
ALTER TABLE S_C DROP CONSTRAINT test2

删除完外键名之后,表与表之间关联关系也就没有了!

如图

其实你也可以使用以下语法进行查看外键主键的信息

exec sp_helpconstraint '表名称'

举个栗子

exec sp_helpconstraint S_C;

如图


这个命令可以帮助我们列出主键外键的详细信息,便于我们参考!

主键外键的命名其实差不多,之前也讲过这里就不过多赘述了!

记住,遇见问题,首先一定要多查阅w3c文档

如图

"👍点赞" "✍️评论" "收藏❤️"

大家的支持就是我坚持下去的动力!

如果以上内容有任何错误或者不准确的地方,🤗🤗🤗欢迎在下面 👇👇👇 留个言指出、或者你有更好的想法,
欢迎一起交流学习❤️❤️💛💛💚💚

更多好玩 好用 好看的干货教程可以点击下方关注❤️微信公众号❤️
说不定有意料之外的收获哦..🤗嘿嘿嘿、嘻嘻嘻🤗!
🌽🍓🍎🍍🍉🍇

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值