专注于 JetBrains IDEA 全家桶,永久激活,教程
持续更新 PyCharm,IDEA,WebStorm,PhpStorm,DataGrip,RubyMine,CLion,AppCode 永久激活教程

MySQL外键已过时?深度剖析外键弃用的真实原因与替代方案

大家发现没有,现在用MySQL外键的情况越来越少了,很多客户甚至要求能不能去掉外键。

外键的场景有很多,比如在使用activi的时候,它自带的表是有外键的。

那为什么现在使用外键越来越少了呢?外键不是能增加数据的完整性和一致性吗?

我们先看看原因:

1、 高并发下性能资源损耗;

2、 高并发下可能导致竞争死锁;

3、 批量处理效率低;

4、 使得开发繁琐,删表时需要先删除子表,再删除主表;

外键的核心价值在于 强制数据一致性,但其代价包括性能损耗、维护成本升高及架构灵活性下降。随着应用规模扩大和技术演进,开发团队更倾向于通过 应用层事务、分布式锁或异步校验 实现数据一致 性,从而逐步减少对外键的依赖。但我想最大的原因就是使得开发变得麻烦,我们看看例子:

CREATE TABLE testb (
  b_id int(11) NOT NULL AUTO_INCREMENT ,
  b_name varchar(50) NOT NULL,
  PRIMARY KEY (b_id) 
) ENGINE=InnoDB  DEFAULT CHARSET=utf8mb4 ;

CREATE TABLE testa (
  t_id int(11) NOT NULL AUTO_INCREMENT,
  t_name varchar(50) NOT NULL,
  t_forid  int(11) NOT NULL,
  PRIMARY KEY (t_id),
  foreign KEY(t_forid) REFERENCES testb(b_id) 
) ENGINE=InnoDB  DEFAULT CHARSET=utf8mb4 ;

testb是正常的表,testb指定t_forid和b_id为外键关系。那么建表的顺序是怎么样的呢,必须testb先执行,再执行testa,如果直接执行testa会报错:

 

删除表的时候呢:相反,需要先删除testa再删除testb

drop table testa;
drop table testb;

否则也会报错:

 

未经允许不得转载:搜云库 » MySQL外键已过时?深度剖析外键弃用的真实原因与替代方案

JetBrains 全家桶,激活、破解、教程

提供 JetBrains 全家桶激活码、注册码、破解补丁下载及详细激活教程,支持 IntelliJ IDEA、PyCharm、WebStorm 等工具的永久激活。无论是破解教程,还是最新激活码,均可免费获得,帮助开发者解决常见激活问题,确保轻松破解并快速使用 JetBrains 软件。获取免费的破解补丁和激活码,快速解决激活难题,全面覆盖 2024/2025 版本!

联系我们联系我们