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

在MySQL中,主键和外键非常重要。
它们可以帮助建立表之间的关系并保持数据的顺利组织。
究竟发生了什么?
我们先来说说主键。
主键对于表中的每条记录都必须是唯一的。
例如,user表中的user_id就是主键。
它有几个特点: 1 .它必须是唯一的。
不能有两条记录具有相同的 user_id。
2 、不能为空,必须填写。
3 .查询时,通过主键查找速度非常快,因为数据库会自动为你建立一个索引,称为聚集索引,直接按顺序存储数据。

我们来谈谈外键。
外键是当前表中指向另一个表的主键的字段。
例如,order表中的user_id是一个外键,指向user表中的主键user_id。
这样就可以实现表之间的关联。
例如,一个用户可以下多个订单,但每个订单只能属于一个用户。

外键有几个规则: 1 .它的值必须在它所指向的表的主键中找到,否则不起作用。
例如,如果要向orders表中插入一条记录,则user_id应该是user表中存在的user_id。
2 .当所指向的主键被删除或更改时,外键也会随之删除或更改。
例如,ONDELETECASCADE表示如果删除users表中的一条记录,则orders表中userid等于该记录的userid的所有订单都会被自动删除。

例如有一个用户表和一个订单表: SQL 用户创建表( user_id INT 主键自动递增, 用户名 VARCHAR(5 0) NOT NULL, 电子邮件 VARCHAR(1 00) 唯一非空 );
创建表命令( order_id INT 主键自动递增, 用户 ID INT, order_date 非空日期, 删除级联时的外键 (user_id) 用户引用 (user_id) );
采用这种设计,如果您尝试向orders表中插入一条记录,但users表中没有匹配的用户id,则不会插入该记录。
如果删除users表中的一条记录,则orders表中user_id等于该记录的所有订单都会被自动删除。

当然,使用主键和外键是要付出代价的。
例如: 1 .写入会比较慢,因为数据库要检查外键约束。
2 . 如果表很大,主键结构很难改变,所有从表的外键必须同时更新。

为了优化,您可以: 1 、给外键字段添加索引,查询会更快。
2 、批量导入数据时,可以暂时关闭外键检查,导入后重新开启。

有时候外键用得太多,表之间的关系会变得很复杂,维护起来会有点困难。
特别是在微服务架构中,一张表可以拆分成不同的服务,外键就没用了。

总之,主键和外键很方便,但是什么时候你要仔细考虑一下它们的使用,并且不要使系统过于复杂。

mysql中主键和外键的区别是哪些

哦..说实话,之前做项目的时候,主键和外键的问题让我头疼了一段时间。
当时我正在一个电子商务项目中设计用户台和订单台。
当时我就想不通,为什么一个用户可以有多个订单,但每个订单只能属于一个用户。

今年是2 01 8 年,我在深圳一家小公司担任技术支持人员。
我当时设计的用户表以“user_id”作为主键。
该ID是唯一的并且适用于每个用户。
但订单表中的“user_id”不是主键,它是一个外键,用于绑定到用户表的主键。

当时我无法解释,为什么users表的主键是“user_id”,而orders表也可以有“user_id”?这不是一样吗?后来,我们询问了我们团队的一位数据库专家,他解释说,主键是为了保证每条记录的唯一性,外键是用来建立表之间的链接。

主键的值必须是唯一的;不能再这样做了,就在那时我了解到空值是不可能的。
但是,A外键可以重复,也可以为空;表示该命令不会绑定到指定用户。
这种关系是每个用户可以有多个订单,但每个订单只属于一个用户。

受限制。
主键具有非空唯一约束,外键具有引用约束;确保外键的值必须位于引用表的主键中。
此限制可确保数据完整性并防止出现孤立记录。

按数量。
一张表只能有一个主键,但可以包含多个外键。
这样的设计让我体会到了数据库设计的精妙之处,对主键和外键有了更深入的理解。

所以兄弟,以后设计数据库时请记住这一区别。
主键和外键是表的心脏,也是表的桥梁。
两者都非常重要。