问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

数据库:表中主键约束和外键约束有什么用?两者之间建立关联后有什么用?

发布网友 发布时间:2022-04-11 01:07

我来回答

3个回答

懂视网 时间:2022-04-11 05:28

引言

其实这个话题是老生常谈,很多人在工作中确实也不会使用外键。包括在阿里的JAVA规范中也有下面这一条

【强制】不得使用外键与级联,一切外键概念必须在应用层解决。 

但是呢,询问他们原因,大多是这么回答的

每次做DELETE 或者UPDATE都必须考虑外键约束,会导致开发的时候很痛苦,测试数据极为不方便。

坦白说,这么说也是对的。但是呢,不够全面,所以开一文来详细说明。

正文

首先我们明确一点,外键约束是一种约束,这个约束的存在,会保证表间数据的关系“始终完整”。因此,外键约束的存在,并非全然没有优点。
比如使用外键,可以

  • 保证数据的完整性和一致性

  • 级联操作方便

  • 将数据完整性判断托付给了数据库完成,减少了程序的代码量

  • 然而,鱼和熊掌不可兼得。外键是能够保证数据的完整性,但是会给系统带来很多缺陷。正是因为这些缺陷,才导致我们不推荐使用外键,具体如下

    性能问题

    假设一张表名为user_tb。那么这张表里有两个外键字段,指向两张表。那么,每次往user_tb表里插入数据,就必须往两个外键对应的表里查询是否有对应数据。如果交由程序控制,这种查询过程就可以控制在我们手里,可以省略一些不必要的查询过程。但是如果由数据库控制,则是必须要去这两张表里判断。

    并发问题

    在使用外键的情况下,每次修改数据都需要去另外一个表检查数据,需要获取额外的锁。若是在高并发大流量事务场景,使用外键更容易造成死锁。

    扩展性问题

    这里主要是分为两点

  • 做平台迁移方便,比如你从Mysql迁移到Oracle,像触发器、外键这种东西,都可以利用框架本身的特性来实现,而不用依赖于数据库本身的特性,做迁移更加方便。

  • 分库分表方便,在水平拆分和分库的情况下,外键是无法生效的。将数据间关系的维护,放入应用程序中,为将来的分库分表省去很多的麻烦。

  • 技术问题

    使用外键,其实将应用程序应该执行的判断逻辑转移到了数据库上。那么这意味着一点,数据库的性能开销变大了,那么这就对DBA的要求就更高了。很多中小型公司由于资金问题,并没有聘用专业的DBA,因此他们会选择不用外键,降低数据库的消耗。
    相反的,如果该约束逻辑在应用程序中,发现应用服务器性能不够,可以加机器,做水平扩展。如果是在数据库服务器上,数据库服务器会成为性能瓶颈,做水平扩展比较困难。

    [转帖]数据库,傻逼才用外键约束!

    标签:正文   数据库服务   class   bsp   并发   需要   高并发   详细说明   服务   

    热心网友 时间:2022-04-11 02:36

    比如说两张表A,B
    A里面的ID是B中ID主键
    B是A的外键
    那么建立表间关系后就可以使用A的条件查询B中的数据列如:
    select * from B

    left join A on A.ID = B.ID where A.name = "啥啥啥"
    还有右链接,内连接

    热心网友 时间:2022-04-11 03:54

    双重约束~~~~~~追问举个例子说明一下,比如删除操作

    声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
    眼泪前面用什么介词 tears的意思中文翻译是什么 两次委婉拒绝别人的请客吃饭,他的心情和别人的想法是怎样的 吃了紧急避孕药后出血怎么办 吃避孕药造成阴道出血怎么办 服用复方短效口服避孕药出现阴道少量流血怎么办 吃完避孕药后出血该怎么办 吃避孕药后出血怎么办 浦发信用卡300额度有一次刷卡消费忘记还款100多块,后来发现已经逾期... 刀塔西游新版本5v5地图详解,刀塔西游5v5新地图曝光 能通过查抖音吗 韩国炒海苔的做法 什么是海苔溶溶片?好吃吗? 耗材供应商提供帮助建设医院spd模式,靠谱么? 医疗spd在国内普及么?目前有哪些医院在做? 国内有专门做spd研究的么? 医用高值耗材管理好像很难,有没有什么好的解决办法? 2018公务员考试行测考场猜答案有哪些窍门? spd库房什么意思 精细化耗材管理服务型spd能为医院带来什么? 公务员考试行测真题解析,这个题目确实有点难,答案是哪个 一家医院一个服务商,SPD模式如何选择? 2018公务员考试行测猜答案的技巧有哪些? 医药公司里面的耗材spd运营是做什么的 医院都在积极布局医疗SPD模式,SPD建设对医院究竟有什么好处啊? 目前的spd管理系统还需要多方协调,医护人员上手难度大,有什么解决办法么? 去4s店修车直赔走保险 氧传感器坏了,发动机故障灯会亮吗? 如何判断氧传感器中毒或失效 求助:发动机故障灯亮,提示后氧传感器故 微博好友圈能看见我的最新评论吗 为什么微博上我对好友的评论她和我能看到,我换个号码就看不到我的评论,但能看到其他人对她的评论? 项目如何让自动化测试工具(AutoRunner)来做软件测 浙江丽水卫校在哪? 丽水卫校2021招生录取分数线 丽水卫校具体情况 丽水卫校是公办还是民办? 丽水市卫生学校怎么样?希望在就读的朋友给个答案。谢谢! 浙江省有哪些卫校 丽水学院几本 丽水有大专卫校吗?2010毕业生,分数线多少?理专科 丽水有多少卫校,介绍一下它们的基本情况。还有分数线 2018年丽水,卫校分数录取分数线是多少? 哪所丽水卫校要搬到丽水学院?是中心医院后面那家吗? 丽水职工中等卫校和丽水卫生学校哪个好点 丽水学院专科护理怎么样?医学部不是在丽水学院里面的吗? 丽水学院的历史沿革 丽水卫校现在分数线大概是多少 浙江丽水2018年卫校分数是多少分 丽水卫校学的东西和海宁卫校一样吗