🚀 个人主页 极客小俊
✍🏻 作者简介:程序猿、设计师、技术分享
🐋 希望大家多多支持, 我们一起学习和进步!
🏅 欢迎评论 ❤️点赞💬评论 📂收藏 📂加关注
其实关于这个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文档
如图
"👍点赞" "✍️评论" "收藏❤️"
欢迎一起交流学习❤️❤️💛💛💚💚
好玩 好用 好看
的干货教程可以点击下方关注❤️微信公众号❤️
说不定有意料之外的收获哦..🤗嘿嘿嘿、嘻嘻嘻🤗!
🌽🍓🍎🍍🍉🍇