首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

哪一个是好的实践?在db中公开主键还是使用其他唯一键查找用户?

在数据库中公开主键还是使用其他唯一键查找用户,这取决于具体的实践需求和设计考虑。以下是两种实践方法的介绍:

  1. 使用数据库中的主键:
    • 概念:主键是数据库表中用于唯一标识每一行数据的列,它具有唯一性和非空性的特点。
    • 优势:主键具备唯一性,能够确保数据的完整性和一致性。在进行数据查找、更新和删除等操作时,使用主键可以提高查询性能,因为数据库系统会使用索引来快速定位数据。
    • 应用场景:适用于对用户数据进行快速查找、更新和删除的场景,尤其是当用户ID作为主键时,可以方便地使用主键进行用户数据操作。
    • 推荐的腾讯云相关产品:云数据库 MySQL版、云数据库 MariaDB版、云数据库 PostgreSQL版等。
    • 产品介绍链接地址:MySQL版(https://cloud.tencent.com/product/cdb_mysql)、MariaDB版(https://cloud.tencent.com/product/cdb_mariadb)、PostgreSQL版(https://cloud.tencent.com/product/cdb_postgresql)。
  • 使用其他唯一键:
    • 概念:除了主键之外,数据库表中可以设置其他唯一键来保证数据的唯一性。
    • 优势:使用其他唯一键可以根据实际需求进行灵活设计,比如使用手机号、邮箱等作为唯一键来查找用户,可以提供更多的便利性和灵活性。
    • 应用场景:适用于需要根据用户的其他属性进行快速查找的场景,比如按照手机号、邮箱等进行用户数据的查找和更新。
    • 推荐的腾讯云相关产品:云数据库 Redis版、云数据库 MongoDB版等。
    • 产品介绍链接地址:Redis版(https://cloud.tencent.com/product/cdb_redis)、MongoDB版(https://cloud.tencent.com/product/cdb_mongodb)。

总结:选择在数据库中公开主键还是使用其他唯一键查找用户,需要根据具体场景和需求进行权衡。主键适用于保证数据完整性和一致性的场景,而其他唯一键则提供了更多的灵活性和便利性。在实践中,可以根据具体业务需求来决定使用哪种方式,或者在不同的表中根据需求选择不同的方式。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

分布式服务接口幂等性

但这还是有很多大坑存在。一个分布式系统某个接口,要保证幂等性,如何保证? 2 如何避免重复下单? 评论里有同学说,前端页面直接防止用户重复提交表单。...db插条记录时,一般不提供主键,而由数据库插入时自动生成一个主键。这样重复请求就会导致插入重复数据。...因此可利用db主键唯一约束”,插数据时带上主键,以此实现创建订单接口幂等性。 给订单服务添加一个“orderId生成”接口,无参,返回值就是一个全局唯一订单号。...该订单号其实就是订单表主键,如此一来,重复请求都是同一订单号。订单服务订单表插入数据时候,执行这些重复INSERT语句中主键,也都是同一个订单号。...然后再重复支付订单时,写尝试插入一条支付流水,db会报错unique key冲突,整个事务回滚即可。 保存一个是否处理过标识也可以,服务不同实例可以一起操作Redis。

2.1K11

还不知道怎么实现分布式服务接口幂等性?

但这还是有很多大坑存在。一个分布式系统某个接口,要保证幂等性,如何保证? 2 如何避免重复下单? 评论里有同学说,前端页面直接防止用户重复提交表单。...db插条记录时,一般不提供主键,而由数据库插入时自动生成一个主键。这样重复请求就会导致插入重复数据。...因此可利用db主键唯一约束”,插数据时带上主键,以此实现创建订单接口幂等性。 给订单服务添加一个“orderId生成”接口,无参,返回值就是一个全局唯一订单号。...然后再重复支付订单时,写尝试插入一条支付流水,db会报错unique key冲突,整个事务回滚即可。 保存一个是否处理过标识也可以,服务不同实例可以一起操作Redis。...实现订单幂等方法,完全可以套用在其他需要实现幂等服务,只需要这个服务操作数据保存在数据库,并且有一张带有主键数据表即可 参考 后端存储实战

49820
  • MySQL 慢查询、 索引、 事务隔离级别

    可以判断查询是全表扫描还是索引扫描。...Usingwhere: 查找使用索引情况下,需要回表去查询所需数据 Usingindex: 表示查询索引树中就可查找所需数据,不用扫描表数据文件 Usingtemporary: 查询过程会使用到临时表...所以,每次查找数据时把磁盘 IO 次数控制一个很小数量级是最优,最好是常数数 量级。那么我们就想到如果一个高度可控多路搜索树是否能满足需求呢?就这样,B+树应运而生。...索引使用原则 关 于 索 引 使 用 原 则 , 美 团 点 评 技 术 团 队 文 章 《 M y S Q L 索 引 原 理 及 慢 查 询 优 化 》 里 总 结 , 如... 些 是 不 可 见

    2.8K50

    面试官:谈一谈如何避免重复下单?

    DB 插记录时,一般不提供主键,而由 DB 插入时自动生成。这样重复请求就会导致插入重复数据。...MySQL 主键自带唯一性约束,若在一条 INSERT 语句提供主键,且该主键已存在,则该条 INSERT 会执行失败。...该订单号其实就是订单表主键,于是,重复请求都是同一订单号。订单服务订单表插入数据时候,执行这些重复 INSERT 语句中主键,也都是同一个订单号。...然后再重复支付订单时,写尝试插入一条支付流水,DB 会报唯一键冲突,整个事务回滚。保存一个是否处理过标识也可以,服务不同实例可以一起操作 Redis。...实现订单幂等方法,完全可以套用在其他需要实现幂等服务,只需要这个服务操作数据保存在数据库,并且有一张带有主键数据表即可。

    65720

    浏览器数据库 IndexedDB(一) 概述

    IndexedDB 允许储存大量数据,提供查找接口,还能建立索引。这些都是 LocalStorage 所不具备。...所有类型数据都可以直接存入,包括 JavaScript 对象。对象仓库,数据以"键值对"形式保存,每一个数据记录都有对应主键主键是独一无二,不能有重复,否则会抛出一个错误。 (2)异步。...IndexedDB 操作时不会锁死浏览器,用户依然可以进行其他操作,这与 LocalStorage 形成对比,后者操作是同步。异步设计是为了防止大量数据读写,拖慢网页表现。 (3)支持事务。...例如,页面中一些不常变动结构化数据,我们就可以使用 IndexedDB 数据库存储本地,有助于增强页面的交互性能。 总结 这一节主要是认识一下 IndexedDB,后续会进行详细讲解。...你归,无论得失,以余韵相赠! 知识与技能并重,内力和外功兼修,理论和实践两手都要抓、两手都要硬!

    88910

    MySQL DDL 数据定义

    key 表示该字段是否是主键、外键、唯一键还是索引。 default value 表示该字段未显示赋值时默认值。 extra 表示其它一些修饰,比如自增 auto_increment。...主键一个或多个列必须为 NOT NULL,而唯一键可以为 NULL。 一个表只能有一个主键,但可以有多个唯一键。 以学生表为例,演示数据表创建。...结果,可以查看 Support 列来确定每个存储引擎是否受支持以及默认存储引擎是什么。 SHOW ENGINES; 查看默认存储引擎也可以使用下面的方式。...SHOW CREATE TABLE tbl_name; 这将显示创建表完整 SQL 语句,包括列定义、索引和约束等信息。您可以在这个输出查找约束定义。...truncate 释放存储表数据所用数据页来删除数据,并且只事务日志记录页释放,所以truncate 比 delete 使用系统和事务日志资源更少,效率更高。

    20220

    这份“插件英雄榜Top20”才是Chrome正确打开方式!

    (左:Chrome 中常规操作;右:使用 Chrono 一键即可) 除了可以代替 Chrome 原生功能,Chrono 插件还有其他功能,比如对浏览器页面按照”资源大小“进行筛选与过滤。...我们浏览一个站点时,它可以帮你查找类似的网站。比如大家现在追剧一般都在 b 站,如果恰巧有一个番剧 b 站没有,那应该去找资源呢?...推荐 Chrome 拓展 Chrome Cleaner Pro,帮你一键清理,快速畅通无负担~这个方法绝对比我们以往选项卡中选择操作要简单得多!...试试 speedtest~至于使用限制,破解之法大家可以项目中查看详情,这里暂时不公开教学了~ 地址: https://www.speedtest.net 8、《OurStickys》Chrome...日常工作,我们市场会用到便签纸这个功能,无论是纸质版还是软件版,都可以帮助我们记录重要事件,是工作必备小助手。而每天浏览那么多网页是怎么做标记呢?

    73340

    这份“插件英雄榜Top9”才是Chrome正确打开方式!

    就类似输入法,无论我们买手机还是买电脑,都有内置输入法键盘与相应功能,但是大家还都会选择其他一些软件或 APP,为什么?...5、《SimilarSites》 一键查找姊妹网站 SimilarSites ”一件在手,啥剧都有”,SimilarSites 就是这样一个实用网站。我们浏览一个站点时,它可以帮你查找类似的网站。...推荐 Chrome 拓展 Chrome Cleaner Pro,帮你一键清理,快速畅通无负担~这个方法绝对比我们以往选项卡中选择操作要简单得多!...试试 speedtest~至于使用限制,破解之法大家可以项目中查看详情,这里暂时不公开教学了~ 地址: https://www.speedtest.net 8、《OurStickys》Chrome...日常工作,我们市场会用到便签纸这个功能,无论是纸质版还是软件版,都可以帮助我们记录重要事件,是工作必备小助手。而每天浏览那么多网页是怎么做标记呢?

    84210

    这份“插件英雄榜Top9”才是Chrome正确打开方式!

    就类似输入法,无论我们买手机还是买电脑,都有内置输入法键盘与相应功能,但是大家还都会选择其他一些软件或 APP,为什么?...5、《SimilarSites》 一键查找姊妹网站 SimilarSites ”一件在手,啥剧都有”,SimilarSites 就是这样一个实用网站。我们浏览一个站点时,它可以帮你查找类似的网站。...推荐 Chrome 拓展 Chrome Cleaner Pro,帮你一键清理,快速畅通无负担~这个方法绝对比我们以往选项卡中选择操作要简单得多!...试试 speedtest~至于使用限制,破解之法大家可以项目中查看详情,这里暂时不公开教学了~ 地址: https://www.speedtest.net 8、《OurStickys》Chrome...日常工作,我们市场会用到便签纸这个功能,无论是纸质版还是软件版,都可以帮助我们记录重要事件,是工作必备小助手。而每天浏览那么多网页是怎么做标记呢?

    81720

    赞!7000 字学习笔记,MySQL 从入到放弃

    MySQL5.7版本,除非在配置文件显视指定default storage engine或者创建表时显视使用engine=语句指定其它存储引擎,否则默认都是InnoDB。...InnoDB存储引擎优势: DML语句支持事务功能,保证ACID特性 行级锁使用保证了高并发属性 InnoDB对有主键表会依据主键优化查询性能,也称聚簇索引,将所有数据存储聚簇索引上以减少对主键查询...索引索引记录了对应数据物理位置,而InnoDB则在索引记录了对应主键数值。...但当表中含有主键⼀键时,则每个被⽤作分区函数字段必须是表⼀键和主键全部或⼀部分,否则就⽆法创建分区表。...其实,实际生产过程还是有相关专业监控数据库第三方开源软件,民工哥之前也写过相关文章,今天发出来供大家参考:强大开源企业级数据库监控利器Lepus MySQL用户行为安全 假设这么一个情况

    69831

    MySQL索引原理、失效情况

    也就是说,基于非主键索引查询需要多扫描一棵索引树,因此,我们应用应该尽量使用主键查询。...Where used: 使用了WHERE从句来限制哪些行将与下一张表匹配或者是返回给用户。...eq_ref: 连接,MySQL查询时,从前面的表,对每一个记录联合都从表读取一个记录,它在查询使用了索引为主键或惟一键全部时使用。...ref: 这个连接类型只有查询使用了不是惟一或主键键或者是这些类型部分(比如,利用最左边前缀)时发生。对于之前每一个行联合,全部记录都将从表读出。...这个类型严重依赖于根据索引匹配记录多少—越少越好。 range: 这个连接类型使用索引返回一个范围行,比如使用>或<查找东西时发生情况。

    1.1K11

    【笔记】Mysql 数据库操作规范

    索引规范: 单张表索引数量不超过 5 个。 单个索引字段数不超过 5 个。 索引名必须全部使用⼩写。 ⾮⼀索引按照“idx_字段名称 [字段名称]”进⾏命名。...表必须有主键,推荐使用 UNSIGNED ⾃增列作为主键。[FAQ-5-01] 唯一键由 3 个以下字段组成,并且字段都是整型时,可使⽤⼀键作为主键其他情况下,建议使⽤⾃增列或发号器作主键。...所有数据库账号密码均不能为空,密码采用 16 位大小写字母和数字组合。 数据库账号 / 密码不允许邮件、企业微信群、家信群公开,一经发现,DBA 有权立即进行重置。...如果⽤户需要查询 secondary index 中所不包含数据列,则需要先通过 secondary index 查找主键值,然后再通过主键查询到其他数据列,因此需要查询两次。...覆盖索引则可以一个索引获取所有需要数据,因此效率较高。主键查询是天然覆盖索引。

    1.4K20

    Mysql最全面试指南

    为什么要尽量设定一个主键? 2.40. 主键使用自增ID还是UUID? 2.41. 字段为什么要求定义为not null? 2.42. 如果要存储用户密码散列,应该使用什么字段进行存储?...第二范式:第一范式基础上,非主键列完全依赖于主键,而不能是依赖于主键一部分。 第三范式:第二范式基础上,非主键列只依赖于主键,不依赖于其他主键。...这种特性使得B树特定数据重复多次查询场景更加高效。 使用B+树好处 由于B+树内部节点只存放键,不存放值,因此,一次读取,可以在内存页获取更多键,有利于更快地缩小查找范围。...当用户要进行数据写入时,对数据加上排他锁。排他锁只可以加一个,他和其他排他锁,共享锁都相斥。 InnoDB存储引擎算法有三种?...主键使用自增ID还是UUID? 推荐使用自增ID,不要使用UUID。

    1.4K40

    详解B+树及其正确打开方式

    没有索引查找 为了方便理解,咱先说一个SQL语句情况,就是最简单精准查询,如下: select [列名列表] from [表名] where 列名=XXX 一个页查找主键为搜索条件 可以直接使用数据页目录进行二分查找...以其他列为搜索条件 不可以使用数据页目录进行二分查找,只能顺序查找,一列列对比是否满足条件。...多个页查找 不管是否以主键作为搜索提交,都不能使用数据页目录进行二分查找,只能顺序查找,逐一对比。 结果:这样查找速度肯定是慢,我们得想一个提升速度方法,那么索引就出现了。...聚簇索引叶子节点存储是完整用户记录,也就是说score表除了主键id外,name和score都存储叶子节点中。...注意:因为这边就只有三个字段,如果字段量多的话,也是需要回表,通过主键id得到其他字段信息。 索引正确打开方式 基于上面的理论知识,我们来实践一下(上面的弄得明明白白就可以)。

    68210

    MySQL数据库:表约束

    默认值 默认值:某一种数据会经常性出现某个具体值,可以一开始就指定好,需要真实数据时候,用户可以选择性使用默认值。...要注意是,这只是最后显示结果,MySQL实际存储还是1。为什么是这样呢?...创建表时候,在所有字段之后,使用primary key(主键字段列表)来创建主键,如果有多个字段作为主键,可以使用复合主键。...,数据不能重复,但是一张表只能有一个主键:唯一键就可以解决表中有多个字段需要唯一性约束问题。...而我们设计员工工号时候,需要一种约束:而所有的员工工号都不能重复。具体指的是公司业务上不能重复,我们设计表时候,需要这个约束,那么就可以将员工工号设计成为 一键

    26930

    从青铜到黄金,对着mysql学,一文搞定mongoDB

    3、更新文档 update() 方法用于更新已存在文档 save() 方法通过传入文档来替换已有文档,_id 主键存在就更新,不存在就插入 语法: db.getCollection('test_data...和修改数据情况差不多,一个是删除第一条满足条件一个是删除所有满足条件。...db.col.find({},{"title":1,_id:0}).limit(1).skip(1) 9、去重 mongodb中进行数据去重是一个很简单操作。使用distinct即可。...",{"age":{"$ne":10}}) 最佳实践 集合名全部小写 禁止使用数字打头库名 文档 key 禁止使用任何 " _ "(下划线)以外特殊字符 尽量存放统一了大小写后数据 创建集合时...,规划索引,集合为空时候创建索引 索引数量越少越好, mongo不支持表连接 设定合适MongoDB连接池大小,Java驱动默认连接池大小是100 不要实例化多个MongoClient。

    76540

    面试系列-索引及检索过程

    主键索引:每个表只有⼀个主键索引,b+树结构,叶⼦节点同时保存了主键值也数据记录,其他节点只存储主键值。...辅助索引:每个表可以有多个,b+树结构,叶⼦节点保存了索引字段值以及主键值,其他 节点只存储索引指端值。...表数据存储独立地方,这两颗B+树叶⼦=子节点都使用⼀个地址指向真正表数据,对于表数据来说,这两个键没有任何差别。由于索引树是独立,通过辅助键检索无需访问主键索引树。...表数据发⽣变更时候,会影响其他记录地址变化,如果辅助索引记录数据地 址,此时会受影响,⽽主键值⼀般是很少更新,当页记录发⽣地址变更时候, 对辅助索引是没有影响。...索引分类 聚集索引(主键索引)、⾮聚集索引(辅助索引)、单列索引、多列索引(⼜称复合索引)、⼀索引 检索过程细分: b+树数据检索过程: ⼀记录检索: 如上图,所有的数据都是,查询105

    41610

    如何学习Python

    Guido决心Python避免这一错误(的确如此,Python与其它语言如C、C++和Java结合非常)。同时,他还想实现在ABC闪现过但未曾实现东西。...如何学习Python ---- 学习Python之前要有Python环境。首先,我们系统上要安装Python。其次是版本选择,选择Python2还是Python3呢?...学习Python要有趁手工具才行。首先,我们要有自己喜欢编辑环境。那么,我们可以选择编辑器及IDE。编辑器这里小白推荐使用Vim或Emacs,一个是编辑器之神,一个是编辑器,两者都非常强大。...后续文章会娓娓道来。还请大家多多关注。小白所写每一篇文章都是精心写作,并上机实践,确保案例可行性及正确性。 动手实践才是硬道理 ---- 天下武功,快不破。学习编程,不动手而学不会。...学习编程最大忌讳就是不动手实践。学习了一定理论知识,并没有经过动手实践及长期大量练习,会有一种学完即忘感觉。所以,学习编程宗旨是:动手、实践实践、再实践

    1K60

    GitHub 标星破万,超全 Chrome 插件汇总整理!

    (左:Chrome 中常规操作;右:使用 Chrono 一键即可) 除了可以代替 Chrome 原生功能,Chrono 插件还有其他功能,比如对浏览器页面按照” 资源大小 “进行筛选与过滤。...我们浏览一个站点时,它可以帮你查找类似的网站。比如大家现在追剧一般都在 b 站,如果恰巧有一个番剧 b 站没有,那应该去找资源呢?...推荐 Chrome 拓展 Chrome Cleaner Pro,帮你一键清理,快速畅通无负担~这个方法绝对比我们以往选项卡中选择操作要简单得多!...试试 speedtest~ 至于使用限制,破解之法大家可以项目中查看详情,这里暂时不公开教学了~ 地址: https://www.speedtest.net 8、《OurStickys》Chrome...日常工作,我们市场会用到便签纸这个功能,无论是纸质版还是软件版,都可以帮助我们记录重要事件,是工作必备小助手。而每天浏览那么多网页是怎么做标记呢?

    2K20
    领券