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

MySQL主键设计盘点

主键设计和应用原则 除了满足MySQL强制实施的规则(主键不可重复;一行中主键不可为空)之外,主键设计和应用应当还遵守以下公认的原则: 不更新主键列中的值; 不重用主键列的值; 不在主键列中使用可能会更改的值...UUID UUID:通用唯一识别码(英语:Universally Unique Identifier,缩写:UUID)是用于计算机体系中以识别信息数目的一个128位标识符,还有相关的术语:全局唯一标识符...2、信息不安全:基于MAC地址生成UUID的算法可能会造成MAC地址泄露,这个漏洞曾被用于寻找梅丽莎病毒的制作者位置。...2、在使用uuid作为主键的时候,最好设计createtime(创建时间)列和modifytime(修改时间)列以应付可能的排序等场景。...结论: 用自建的id生成器做主键适用于大规模分布式架构 参考: 【1】:红心李 :MySQL主键设计 【2】:Uncle Nucky :MySQL数据库主键设计原则 【3】:ellis:设计套路:Mysql

4.2K30

第17期:索引设计主键设计

表的主键指的针对一张表中的一列或者多列,其结果必须能标识表中每行记录的唯一性。InnoDB 表是索引组织表,主键既是数据也是索引。 主键设计原则 1....,所以每个区的表都有自己独立的自增主键, 考虑这样建立一张汇总表 n3,有新的自增 ID,并且设计导入老系统的 ID。...主键设计要求可读性很强,类似学生学号(入学年份+所属系+所读专业),购物订单编码等。其实非常不建议主键用这样有实际意义的业务字段。...可以新建一个自增主键或者 uuid_short() 函数字段,实际业务字段非主键设计,变为普通唯一索引。...但是如果有与业务不相关的主键,只需要更改业务字段(二级索引)就可以,不需要更改依赖这张表的子表。 关于 MySQL 主键设计思路大致介绍到此,有问题欢迎留言,欢迎指正本篇任何不足之处。 ----

62210
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    数据库模型设计——主键设计

    在数据库设计时,主要就是对实体和关系的设计,实体表现出来就是表,关系表现出来就是外键。而对于一个表,由两部分组成:主键和属性。主键的简单定义就是表中为每一行数据的唯一标识。...一个表中可以有多个候选键,但是只有一个主键。由于主键常常用于检索数据,也用于表之间的关联,所以主键设计的好坏将会严重影响数据操作的性能。下面来介绍下主键设计的几个考虑因素。...数据库主键与业务主键 前面说到一个表可能有很多个唯一标识的候选键,那么这么多候选键中,哪个应该拿来做主键呢?...还有一个原因是业务主键在数据录入的时候不一定是明确知道的,有时我们会在不知道业务主键的情况下,就录入其他相关信息,这个时候,如果使用业务主键做数据库的主键,那么数据将无法录入。...比如员工表把员工号作为主键,那么员工还没有入职,没有员工号的时候,HR需要先维护一些该预入职员工的信息是不可能的。 联合主键 联合主键就是以多个字段来唯一标识每一行数据。

    1.1K30

    一个表主键信息采集脚本

    一个表主键信息采集脚本 今天在做数据库巡检的时候,想到了一个巡检项,就是想看看线上环境目前有哪些表没有使用主键,分析这个信息可以发现一些业务在查询的时候的潜在问题,由于这个信息从来没有采集过...这个问题需要拆成好几个子问题来解决: 01 如何查询目前哪些表有主键?...查询目前哪些表有主键,可以通过information_schema.key_column_usage表来确定哪些列使用了主键约束,这个表中包含如下列,每个列的含义如下: CONSTRAINT_CATALOG...02 如何获得当前数据库中没有主键的表? 要想获得没有主键的表,需要使用全库的所有表去掉包含主键的表,那么问题就先转化为如何获取全库的所有表?...info_from_sys.lst # echo $port_tmp $socket_tmp >> info_from_sys.lst done < info_from_sys.tmp } ##输出所有没有主键的表的信息

    49210

    淘宝数据库,主键如何设计的?

    从系统设计的角度看,这个变化只是修改了会员信息表中的卡号是“10000001”这个会员 信息,并不会影 响到数据一致性。...其实,客户电话也有这个问题,这也是我们在设计会员信息表的时候,允许身份证号和 电话都为空的原因。 所以,建议尽量不要用跟业务有关的字段做主键。...淘宝的主键设计 在淘宝的电商业务中,订单服务是一个核心业务。请问, 订单表的主键 淘宝是如何设计的呢?是自增ID吗? 打开淘宝,看一下订单信息: 从上图可以发现,订单号不是自增ID!...推荐的主键设计 非核心业务 :对应表的主键自增ID,如告警、日志、监控等信息。 核心业务 :主键设计至少应该是全局唯一且是单调递增。...在当今的互联网环境中,非常不推荐自增ID作为主键的数据库设计。更推荐类似有序UUID的全局 唯一的实现。 另外在真实的业务系统中,主键还可以加入业务和系统属性,如用户的尾号,机房的信息等。

    1.3K20

    文件分片上传设计

    其实说分片上传,原理很简单,就是前端分片、上传,后端的解析合并。其实半句话就可以讲清楚,但是代码实现起来要花很大的功夫。今天的代码案例shigen选取的是node.js作为后端服务写的文件上传。...我们先来看一下实现的效果:整体的传输效果很快,会在文件夹里存储分片,在所有的分片上传完毕之后,整合成一个文件。我可以直接的打开和预览。那代码怎么设计的呢?这是个核心的问题。一起来和shigen看看吧。...代码设计前端文件名为index.html。...后记最近突然有了一种偏见,这些设计完全都是没用的。因为仙子云服务这么成熟的了,对象存储这么成熟了,谁还成天研究这些东西。...我们以腾讯云的对象存储COS为例子,我们看看腾讯云COS操作文档:作为云服务提供厂商,它已经帮我们想好了遇到的各种情况,甚至把相应的API设计好了。我们再去想破头实现,显得是那么的无意义。

    54550

    淘宝数据库,主键如何设计的?(文末福利)

    2、 业务字段做主键 为了能够唯一地标识一个会员的信息,需要为 会员信息表 设置一个主键。那么,怎么为这个表设置主键,才能达到我们理想的目标呢?这里我们考虑业务字段做主键。...从系统设计的角度看,这个变化只是修改了会员信息表中的卡号是“10000001”这个会员 信息,并不会影响到数据一致性。...其实,客户电话也有这个问题,这也是我们在设计会员信息表的时候,允许身份证号和电话都为空的原因。 所以,建议尽量不要用跟业务有关的字段做主键。...4、推荐主键设计 非核心业务 :对应表的主键自增ID,如告警、日志、监控等信息。 核心业务 :主键设计至少应该是全局唯一且是单调递增。...在当今的互联网环境中,非常不推荐自增ID作为主键的数据库设计。更推荐类似有序UUID的全局唯一的实现。 另外在真实的业务系统中,主键还可以加入业务和系统属性,如用户的尾号,机房的信息等。

    43930

    页面信息设计思考

    用户体验要素 之前做完整的app,主要的精力都放在确定功能、梳理信息架构和流程上(结构层)。 对于单张页面上的信息排布和节奏并没有太多的感知,只是不知道的时候看看竞品,然后抄抄改改。...现在在部门老大和导师的强行带飞下,发现原来单张页面的信息(框架层)是可以梳理的很清楚,并不断打磨的。...现在归纳一下页面信息设计方法: 1、这个页面要传达什么概念,需要包含什么信息 2、这些信息能被整合成几个大部分,每个部分传递了什么概念 3、这些大部分在页面应该以什么顺序排列才能让用户更好的理解页面想要传达的信息...4、每一个大部分能被分成几个小部分,每个小部分能让用户传递了什么概念 5、这些小部分在页面应该以什么顺序排列才能让用户更好的理解大部分想要传达的信息 6、让自己成为一个一无所知的用户,看进入这个页面后能获得什么信息...,这些信息是不是当时设计时想要传达的 举个例子(还可以继续拆分) 支付宝乘车码 感觉自己每天都在被带飞,每天都有新收获,开心~

    85120

    【探花交友】保存用户信息上传用户头像、用户信息管理

    文章目录 1.3、保存用户信息 1.4、上传用户头像 2、用户信息管理 2.1、查询用户资料 2.2、更新用户资料 1.3、保存用户信息 1.3.1、接口文档 YAPI接口地址:http://192.168.136.160...:3000/project/19/interface/api/88 1.3.2、需求分析 数据库表 tb_user_info(用户基本资料表) 用户表和用户信息表是一对一的关系,两者采用主键关联的形式配置...主键关联:用户表主键和用户资料表主键要保持一致(如:用户表id=1,此用户的资料表id=1) 执行流程 手机端发送请求到消费者 消费者构造数据,调用提供者 消费者完成业务处理,...1.4.1、需求分析 接口文档 YAPI地址:http://192.168.136.160:3000/project/19/interface/api/91 文件上传采用POST传递,mvc中经过文件解析器转化为...throws IOException {    //1、将图片上传到阿里云

    2.5K50

    Spring Boot+Vue 文件上传,如何携带令牌信息

    构造好 FromData 后,就可以直接上传数据了,FormData 就是要上传的数据。 文件上传注意两点,1. 请求方法为 post,2....上传的文本也设为变量,默认上传 button 的文本是 数据导入 ,当开始上传后,将找个 button 上的文本修改为 正在导入。...,修改上传按钮为不可点击,同时修改上传按钮的图标和文本。...文件上传成功或者失败时,修改上传按钮的状态为可以点击,同时恢复上传按钮的图标和文本。...常规的上传需求第二种方式可以满足,但是如果要对上传的方法进行定制,则还是建议使用第一种上传方案。 2.手动传递令牌 对于上面不同的文件上传方式,手动上传令牌也有不同的方案,松哥来和大家挨个介绍。

    60710

    SQL Server2000导出数据时包含主键、字段默认值、描述等信息

    时经常用SQL Server2000自带的导出数据向导将数据从一台数据库服务器导出到另一台数据库服务器: 结果数据导出了,但表的主键、字段默认值、描述等信息却未能导出,一直没想出什么方法,...说明 1.生成SQL脚本时应注意包含扩展属性、主键、默认值等信息; 如何导出?...SQL Server2000生成SQL脚本时导出字段描述、主键和默认值等信息 SQL Server2000生成SQL脚本时默认没有生成字段描述、主键和字段默认值等信息,但这些信息都非常重要,...是必须要生成的,所以在生成SQL脚本时必须手工设置下: 1.生成字段描述:切换到"设置格式"选项卡,钩选"包括扩展属性" 2.生成主键和字段默认值:切换到"选项"选项卡,钩选"...编写主键、外键、默认值和检查约束脚本" 2.如果服务器上的数据库用户名和本地用户名不同,应该将SQL脚本中的数据库用户改为服务器上的用户,例如本地用户是dbo,服务器上的用户是dnawo,就应将

    1.2K110
    领券