PK数据库 联合主键和自增主键

主键:主键是用来干嘛的?一般来说是为了建立唯一标识,建立索引的。

主键的使用目的:

a.为了保证数据查找唯一;

b.提高存储效率和索引效率。

索引:如果表的读操作少或者没有,索引效率会高,如果表的写操作较多或者大量,建立索引会慢。

主键的设置方法有3种:

一种是设置自增长主键,第二种是采用业务主键,第三种是生成唯一序列(使用uuid/guid);
如何选择主键设置方式:

必须按情况来看:

 1.使用业务联合主键:

a.是否绝大部分查询都是能用上联合主键的查询,并且没有其它查询方式join到这个表,也没有其它索引和外键,那么适合联合主键+cluster key,这样查询效率高一些。

b.联合主键和自增主键在查询上没什么性能上的区别(前提是索引相同,运用得当)。写的性能上是有区别的,因为联合主键会使用更多的block去创建索引,所以在写操作上性能要低一些。

2.使用生成唯一的序列
 a.如果不满足使用自增的要求,则建议优先使用字符主键。类似网站数据库,可以采用uuid、guid这类无规则字符做主键。因为字符主键查询速度不比自增主键慢。

b.UUID.randomUUID().toString()是javaJDK提供的一个自动生成主键的方法。UUID(Universally Unique Identifier)全局唯一标识符,是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的,是由一个十六位的数字组成,表现出来的形式。由以下几部分的组合:当前日期和时间(UUID的第一个部分与时间有关,如果你在生成一个UUID之后,过几秒又生成一个UUID,则第一个部分不同,其余相同),时钟序列,全局唯一的IEEE机器识别号(如果有网卡,从网卡获得,没有网卡以其他方式获得),这样对于分库分表的情况就会很适用。UUID的唯一缺陷在于生成的结果串会比较长。

c.防止注入式攻击,当我们使用主键自增的时候,需要删除一个东西的时候,一般都是id=?。这样的话我就可以在url中修改这个id的值,这样可能就被人删除了其他东西,UUID这个就是给主键id加上一层锁,使它不暴露给用户;

3.使用自增主键的场景:

其它大部分情况仍然适合自增主键。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
联合主键和复合主键数据库中用于保证记录唯一性的两种方式。它们的区别在于概念和使用场景。 联合主键是指多个主键字段组合形成一个主键组合,这个组合是唯一的。例如,主键A和主键B组合形成的联合主键是唯一的,即使主键A和主键B的数据可以完全相同。联合主键适用于多对多关系的情况,其中一个主键字段的值可能重复,但与另一个主键字段组合后的联合主键值是唯一的。 复合主键是指一个表的主键含有一个以上的字段组成。复合主键的出现是为了保证记录的唯一性。例如,一个表的主键由字段A和字段B组成,这样可以确保记录的唯一性,因为字段A可能会出现重名,所以需要加上字段B来保证唯一性。复合主键适用于需要多个字段组合来唯一标识记录的情况。 总结来说,联合主键是多个主键字段组合形成的唯一键,适用于多对多关系的情况;而复合主键是一个表的主键含有一个以上的字段组成,适用于需要多个字段组合来唯一标识记录的情况。 #### 引用[.reference_title] - *1* [联合主键和复合主键区别](https://blog.csdn.net/u011350541/article/details/48524897)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [联合主键和复合主键区别](https://blog.csdn.net/yzhbyssgdbd123/article/details/106595054)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值