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

其实关于这个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文档
如图



"👍点赞" "✍️评论" "收藏❤️"欢迎一起交流学习❤️❤️💛💛💚💚

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


1012

被折叠的 条评论
为什么被折叠?



