mysql中主键和外键的区别 主键外键定义和关系对比

嘿...回到2 02 2 年...我刚开始研究MySQL...我对主键和外键真的很困惑...
主键...是...表中的每一行...必须唯一标识...例如...用户表...ID字段...AUTO_INCRMENT...继续往上...保证不重复...不能为空...这是最基本的...对吧?
外键...有点复杂...您必须引用另一个表的主键...例如...您有一个订单表...user_id...这个user_id...必须在users表的id字段中找到...。
..不能随便编辑...不然...你就错了...
我当时也很困惑...为什么会有外键...一开始我以为...反正主键本身就足够唯一了...外键层...是做什么用的?
后来我意识到...外键..​​.是用于数据关系...例如...一个用户可以...下很多订单...这是“一对多”...订单表中的user_id...指向用户表中的ID...类似这样的Uni...如果你检查订单表...你就会知道每个订单属于哪个用户...
而且...外键..​​.还可以保证数据一致性...你不能将不存在的用户ID写入...订单...,对吧?如果在users表中删除了一个用户...id为1 ...那么在orders表中...所有user_id都是1 ...orders也必须处理...要么删除,要么改为NULL...这叫级联删除...或者...设置为SET NULL...
定义外键时...FOREIGN KEY...REFERENCES...必须写得很详细...
设计原则...主键...最好用整数...自增...简单...高效...不要使用字符串...占用太多空间...而且慢...外键...必须与主键类型相同...例如...
性能影响...主键...索引...自动创建创建...查询快...外键...附加检查...参照完整性...所以...插入数据时...有点慢...尤其...对于大批量数据...
后来我感觉...外键键...有点慢,但是...它们节省精力...您不必在应用程序层编写逻辑...防止错误...例如...删除用户时...您忘记删除订单...数据库被阻止了抱歉...这很好...
但是...有时...外键...是一个真正的陷阱...尤其...对于大量数据...对于批量操作...外键约束...可能会发生延迟...2 02 2 年...系统...遇到...夜间批量删除...结果...由于外键卡了很长时间...
也就是说...高频优化时...查询中的外键列...必须建立索引...否则...相关查询...会很慢...
综上...主键...在自己的表中...每一行...不重复...外键...确保...表之间的关系正确...不能随机连接...
就是这样……无论如何……我明白了……我想……显然……数据库……结果很有趣……

mysql属于哪种数据库类型

嘿朋友们,说到MySQL,我对这个东西真是又爱又恨。
记得当时在公司做项目,使用MySQL的时候,很头疼。
我们先来说一下表结构。
就像家里的食谱书一样。
每一页代表一道菜肴,每一行都是您制作的一个步骤,每个步骤对应一种食材。
这看起来很清楚,但是如果你做饭太多,发现重复菜谱太多,就会出现数据冗余的问题。

然后是主键和外键,它们就像你家的钥匙。
每个菜谱都有一个主键,比如菜名,这样你就可以快速找到你想要的菜谱。
外键就像食谱中的成分列表,告诉您在哪里可以找到该成分。
但是这两个东西如果用不好的话,就会出现问题。
例如,如果外键约束使用不当,在删除数据时可能会意外删除其他表中的数据。

我们来谈谈数据完整性。
这就像家里的账本一样。
每一笔账都必须记录清楚,不允许乱七八糟。
MySQL通过主键、外键和数据类型来保证数据的准确性。
但是,如果使用错误的数据类型,例如使用日期作为数字,则会变得混乱。

至于ACID特性,就像银行处理一样,要么全做,要么全不做,保证你的钱不会丢失。
MySQL的InnoDB引擎依靠此来保证数据的一致性和持久性。

回到MySQL的优点,开源免费是必须的。
谁不想省点钱呢? 在性能方面,MySQL优化得很好,索引和缓存都使用得很好。
至于扩展性,垂直扩展就是升级服务器,水平扩展就是使用主从复制或者分片,比较实用。

但是,与NoSQL相比,MySQL的可扩展性可能意义不大。
NoSQL的分布式架构更方便实现。
而且MySQL的ACID特性有时会成为它的缺点,因为为了保证数据的一致性,它可能会牺牲一些性能。

总之,MySQL用得好的话非常方便,但用得不好就真的很头疼了。
然而,这就是我说我又爱又恨的原因。
哈哈,废话不多说了,有什么问题尽管问吧。

mysql中主键和外键的关系 主外键关联关系详解

主键和外键是表之间关联的两列,因此数据不是消息。
主键是每台仪器的唯一ID号,既不能重复,也不能为空。
外键必须引用其他人的身份证号,这样关联才正确。

我上周刚开始一个项目,用户表和订单表必须使用外键连接。
例如,用户 ID 必须与用户表中存在的行表 ID 匹配。
这将防止在没有用户的情况下生成订单。

外键也滑到了删除操作。
如果删除一个用户,他的所有订单都会自动删除。
但是,我们建议谨慎使用。
如果你误删除了它,你就会遇到麻烦。
在电子商务系统中,不强制使用外键。
如果用户ID手动填写正确,订单将随机发送。

听话做事。
外键检查确实很慢。
在我正在处理的报告中,订单表有大量数据,显然插入时卡住了。
解决办法是在外键字段上建立索引,或者批量操作时先关闭外键检查。

分布式系统中的外键要麻烦得多。
一旦数据库分裂,约束就失效了,只能通过消息队列来解决。
我仍在读这篇文章,但我并不完全理解它。

您的系统使用大量外键吗?

mysql如何理解主键和外键

记得有一次,我在周末下午帮朋友建立了一个简单的网上书店数据库。
为了确保每本书的信息都是唯一的,我在图书信息表上设置了一个主键。
我选择书号作为主键,因为每本书都有一个唯一的编号。
设置好主键后,我开始添加图书信息。
突然我发现一本新书没有书号。
我意识到如果没有强制主键,数据库中可能会有重复的数据。

然后,我在 Orders 表中设置了一个外键,它引用 Book Information 表中的主键 - 书号。
这样,订单表中的每条记录都将指向一本实际存在的书籍,避免订单中不存在的书籍信息。
这个过程让我更加深刻的认识到主键和外键的重要性。

但是,我突然想到,如果有一天书店需要整合库存,这些外键关系可能会变得复杂。
我需要考虑如何处理分布在多个书店的订单以及如何确保数据的一致性和完整性。
等等,还有一件事。
如果书店决定改变图书编号规则,主键的定义也会改变。
这是另一个需要考虑的问题。