mysql中如何设置两个主键

上周一位客户问我如何在 MySQL 中设置复合主键,我向他解释了这一点。
首先你要知道,虽然MySQL规定一张表只能有一个主键,但是复合主键可以让你达到和有两个主键相同的效果。

方法一是复合主键,推荐使用。
您可以使用 ALTER TABLE 语句将多个列组合为主键。
组合的列值必须是唯一的。
要为客户表中的客户 ID 和姓氏设置复合主键,请键入以下示例:
sql 更改表客户添加主键(客户 ID,姓氏);
优点是可以保证组合列的唯一性,避免重复数据,优化搜索性能。
但是,在插入或更新数据时确保组合值是唯一的可能会稍微复杂一些。

方法2 是多列主键,我不太推荐。
它通过现有的唯一索引创建主键,语法为USING INDEX,但这种方法依赖于唯一索引,并不是所有MySQL版本都支持。
效果与复合主键类似,但语法和兼容性不是很好。

有几点需要注意:
主键的唯一性,无论是复合主键还是多列主键,都是由几列的组合来保证的,而不是两个独立的主键。

版本限制(例如 USING INDEX 语法)可能不适用于 MySQL 8 .0,因此首选复合主键。

性能影响,复合主键的列顺序会影响索引效率,必须根据搜索场景进行设计。

如果需要强制某些列的唯一性,但又不想使用复合主键,可以指定单列主键,例如自增ID,然后对其他列添加UNIQUE约束。

总之,USING INDEX建议使用复合主键,避免使用多列主键。
设计主键时,一定要根据业务需求,保证唯一性和搜索效率。
无论哪种方式,都由您决定。
这要根据实际情况而定。
我还在思考这个问题,毕竟各个业务场景都不一样。

MySQL主键与唯一键区别解析_选择正确约束保证数据完整性

我记得有一次帮助朋友重建一个旧的数据库表。
该表中有一个包含用户电子邮件地址的字段。
本来我想用这个字段作为唯一键,但后来我发现有些用户没有输入他们的电子邮件地址。
这突然让我想到:如果设置为唯一键,那么用户数据不填写电子邮件地址不是会出现问题吗?所以我决定将邮箱字段更改为普通字段,但保留其唯一性约束并允许其为空。
这样,未输入电子邮件地址的用户不会影响数据的完整性。
同时,其他输入了电子邮件地址的用户也可以保证其电子邮件地址的唯一性。
这段小小的经历让我意识到,在设计数据库时,需要根据实际情况灵活选择主键和唯一键。