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

spring- uuid作为主键不能更新

spring-uuid作为主键不能更新是因为UUID是一种全局唯一标识符,它的值在创建时就确定了,不可更改。在数据库中,主键用于唯一标识每一条记录,而且主键值一旦确定就不能更改,否则会破坏数据的完整性和一致性。

UUID是一种128位的数字标识符,通常表示为32个十六进制数字的字符串。它具有全球唯一性,可以在分布式系统中生成唯一标识符,而不需要中央协调机构的支持。

使用UUID作为主键的优势是:

  1. 全局唯一性:UUID可以在分布式系统中生成唯一标识符,避免了主键冲突的问题。
  2. 安全性:UUID的生成算法使用了随机数和时间戳等信息,使得UUID难以被猜测或破解。
  3. 无需中央协调机构:生成UUID的算法可以在本地生成,不需要依赖于中央协调机构。

应用场景:

  1. 分布式系统:在分布式系统中,使用UUID作为主键可以确保每个节点生成的标识符都是唯一的,避免了主键冲突的问题。
  2. 数据库复制:在数据库复制的场景中,使用UUID作为主键可以避免主键冲突导致的数据同步问题。

推荐的腾讯云相关产品和产品介绍链接地址:

腾讯云提供了多种云计算相关产品,包括云服务器、云数据库、云存储等。具体推荐的产品和链接地址可以根据具体需求来选择,以下是一些常用的腾讯云产品:

  1. 云服务器(ECS):提供弹性计算能力,支持多种操作系统和应用场景。产品介绍链接:https://cloud.tencent.com/product/cvm
  2. 云数据库MySQL版(CDB):提供稳定可靠的云数据库服务,支持高可用、备份恢复等功能。产品介绍链接:https://cloud.tencent.com/product/cdb
  3. 云存储(COS):提供高可靠、低成本的对象存储服务,适用于图片、音视频、文档等数据的存储和管理。产品介绍链接:https://cloud.tencent.com/product/cos
  4. 人工智能(AI):腾讯云提供了多种人工智能相关的产品和服务,包括图像识别、语音识别、自然语言处理等。产品介绍链接:https://cloud.tencent.com/product/ai

请注意,以上推荐的产品和链接仅供参考,具体选择还需根据实际需求和情况进行评估和决策。

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

相关·内容

为啥不能uuid做MySQL的主键

在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一,单机递增),而是推荐连续自增的主键id,官方的推荐是auto_increment,...,user_random_key,分别表示自动增长的主键,uuid作为主键,随机key作为主键,其它我们完全保持不变....long值 id自动生成表: image.png 用户uuid表 image.png 随机主键表: image.png 1.2.光有理论不行,直接上程序,使用spring的jdbcTemplate...带着疑问,我们来探讨一下这个问题: 二、使用uuid和自增id的索引结构对比 2.1.使用自增id的内部结构 image.png 自增的主键的值是顺序的,所以Innodb把每一条记录都存储在一条记录的后面...image.png 因为uuid相对顺序的自增id来说是毫无规律可言的,新行的值不一定要比之前的主键的值要大,所以innodb无法做到总是把新行插入到索引的最后,而是需要为新行寻找新的合适的位置从而来分配新的空间

3.9K20

为什么MySQL不推荐使用uuid作为主键

前言 在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一,单机递增),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用...,分别表示自动增长的主键uuid作为主键,随机key作为主键,其它我们完全保持不变....long值 id自动生成表: [图片] 用户uuid表 [图片] 随机主键表: [1240] 1.2.光有理论不行,直接上程序,使用spring的jdbcTemplate来实现增查测试: 技术框架:springboot...带着疑问,我们来探讨一下这个问题: 二、使用uuid和自增id的索引结构对比 2.1.使用自增id的内部结构 [1240] 自增的主键的值是顺序的,所以Innodb把每一条记录都存储在一条记录的后面。...[1240] 因为uuid相对顺序的自增id来说是毫无规律可言的,新行的值不一定要比之前的主键的值要大,所以innodb无法做到总是把新行插入到索引的最后,而是需要为新行寻找新的合适的位置从而来分配新的空间

4.7K30

为什么MySQL不推荐使用uuid或者雪花id作为主键

p=5090 前言 在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一,单机递增),而是推荐连续自增的主键id,官方的推荐是auto_increment...一、mysql和程序实例 1.1.要说明这个问题,我们首先来建立三张表 分别是user_auto_key,user_uuid,user_random_key,分别表示自动增长的主键,uuid作为主键,随机...key作为主键,其它我们完全保持不变....用户uuid表 ? 随机主键表: ?...带着疑问,我们来探讨一下这个问题: 二、使用uuid和自增id的索引结构对比 2.1.使用自增id的内部结构 ? 自增的主键的值是顺序的,所以Innodb把每一条记录都存储在一条记录的后面。

3.9K20

华为面试官:为什么MySQL不推荐使用uuid作为主键

1、前言 在MySQL中设计表的时候,MySQL官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一,单机递增),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用...2 MySQL和程序实例 ★ 要说明这个问题,我们首先来建立三张表 分别是user_auto_key,user_uuid,user_random_key,分别表示自动增长的主键uuid作为主键,随机key...作为主键,其它我们完全保持不变....long值 ID自动生成表: 用户UUID表: 随机主键表: ★ 只有理论不行,直接上程序,使用spring的jdbcTemplate来实现增查测试 技术框架:springboot+jdbcTemplate...因为uuid相对顺序的自增id来说是毫无规律可言的,新行的值不一定要比之前的主键的值要大,所以innodb无法做到总是把新行插入到索引的最后,而是需要为新行寻找新的合适的位置从而来分配新的空间。

1.9K20

使用雪花id或uuid作为MySQL主键,被老板怼了一顿!

磊哥,前几天在做项目demo的时候,使用雪花id或uuid作为Mysql主键,被老板怼了一顿!...一、MySQL和程序实例 1.1 要说明这个问题,我们首先来建立三张表 分别是user_auto_key,user_uuid,user_random_key,分别表示自动增长的主键,uuid作为主键,随机...key作为主键,其它我们完全保持不变.根据控制变量法,我们只把每个表的主键使用不同的策略生成,而其他的字段完全一样,然后测试一下表的插入速度和查询速度: 注:这里的随机key其实是指用雪花算法算出来的前后不连续不重复无规律的...用户uuid表 ? 随机主键表: ?...带着疑问,我们来探讨一下这个问题: 二、使用uuid和自增id的索引结构对比 2.1 使用自增id的内部结构 ? 自增的主键的值是顺序的,所以Innodb把每一条记录都存储在一条记录的后面。

7.9K32

使用雪花id或uuid作为Mysql主键,被老板怼了一顿!

,而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究竟有什么坏处?...一、mysql和程序实例 1.1 要说明这个问题,我们首先来建立三张表 分别是user_auto_key,user_uuid,user_random_key,分别表示自动增长的主键uuid作为主键,随机...key作为主键,其它我们完全保持不变。...带着疑问,我们来探讨一下这个问题: 二、使用uuid和自增id的索引结构对比 2.1 使用自增id的内部结构 自增的主键的值是顺序的,所以Innodb把每一条记录都存储在一条记录的后面。...减少了页分裂和碎片的产生 2.2 使用uuid的索引内部结构 因为uuid相对顺序的自增id来说是毫无规律可言的,新行的值不一定要比之前的主键的值要大,所以innodb无法做到总是把新行插入到索引的最后

1.2K20

使用雪花id或uuid作为Mysql主键,被老板怼了一顿!

前言: 在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用...# mysql和程序实例 1.要说明这个问题,我们首先来建立三张表 分别是user_auto_key,user_uuid,user_random_key,分别表示自动增长的主键,uuid作为主键,随机key...作为主键,其它我们完全保持不变.根据控制变量法,我们只把每个表的主键使用不同的策略生成,而其他的字段完全一样,然后测试一下表的插入速度和查询速度: 注:这里的随机key其实是指用雪花算法算出来的前后不连续不重复无规律的...带着疑问,我们来探讨一下这个问题: # 使用uuid和自增id的索引结构对比 1.使用自增id的内部结构 自增的主键的值是顺序的,所以Innodb把每一条记录都存储在一条记录的后面。...因为uuid相对顺序的自增id来说是毫无规律可言的,新行的值不一定要比之前的主键的值要大,所以innodb无法做到总是把新行插入到索引的最后,而是需要为新行寻找新的合适的位置从而来分配新的空间。

1.5K10

使用雪花id或uuid作为Mysql主键,被老板怼了一顿!

---- 前言 在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一,单机递增),而是推荐连续自增的主键id,官方的推荐是auto_increment...,user_random_key,分别表示自动增长的主键,uuid作为主键,随机key作为主键,其它我们完全保持不变....用户uuid表 ? 随机主键表: ?...带着疑问,我们来探讨一下这个问题: 二、使用uuid和自增id的索引结构对比 2.1.使用自增id的内部结构 ? 自增的主键的值是顺序的,所以Innodb把每一条记录都存储在一条记录的后面。...因为uuid相对顺序的自增id来说是毫无规律可言的,新行的值不一定要比之前的主键的值要大,所以innodb无法做到总是把新行插入到索引的最后,而是需要为新行寻找新的合适的位置从而来分配新的空间。

2.2K10

使用雪花 id 或 uuid 作为 MySQL 主键,被老板怼了一顿!

`,`user_random_key`, 分别表示自动增长的主键, uuid 作为主键, 随机 key 作为主键, 其它我们完全保持不变....根据控制变量法, 我们只把每个表的主键使用不同的策略生成, 而其他的字段完全一样,然后测试一下表的插入速度和查询速度: 注:这里的随机 key 其实是指用雪花算法算出来的前后不连续不重复**无规律**...时间占用量总体可以打出的效率排名为:auto_key>random_key>uuid,uuid 的效率最低,在数据量较大的情况下,效率直线下滑。那么为什么会出现这样的现象呢?...相对顺序的自增 id 来说是毫无规律可言的, 新行的值不一定要比之前的主键的值要大, 所以 innodb 无法做到总是把新行插入到索引的最后, 而是需要为新行寻找新的合适的位置从而来分配新的空间。...结论:使用 innodb 应该尽可能的按主键的自增顺序插入,并且尽可能使用单调的增加的聚簇键的值来插入新行 **2.3 使用自增 id 的缺点** 那么使用自增的 id 就完全没有坏处了吗?

2.9K00

MySQL 8.0.23新特性 - 不可见列

如果我们用InnoDB Ruby来说明这个过程,下面的图片显示了当使用随机字符串作为主键插入记录时表空间是如何更新的: 每次有一个插入,几乎所有的页都会被触及。...主键必须短。 UUID怎么样? 我通常建议使用自增整型(或bigint)作为主键,但是不要忘记监控它们! 但我也明白越来越多的开发人员喜欢使用uuid。...额外 仅为娱乐,并说明我对使用UUID_TO_BIN(UUID()) 作为主键的看法,让我们重新使用UUID作为不可见列重复这个例子。...如果算法不能找到合适的索引,或者只能找到一个非唯一索引或者包含null值,则需要使用哈希表来识别表记录。该算法创建一个哈希表,其中包含更新或者删除操作的记录,并用键作为该行之前完整的映像。...因此,如果应用程序不支持使用额外的键作为主键,则使用隐藏列作为主键是加快复制的一个方法。

1.3K10

MySQL 为了让你的表里有一个主键是操碎了心

在 MySQL 的开发规范中都会明确写着:MySQL InnoDB 表必须有主键主键的选择建议:添加一个自增列作为主键,每一行的值删除后一般不会重用。...如果前两者都没有,MySQL 会生成一个内部隐式的 6 bytes 的隐式 row_id 作为主键 再来看看 MySQL 主键现在的用处: 1....首先来讲 MySQL InnoDB 的主键设计影响写入,更新等。 2. 好的主键设计也可以加速复制 3....MySQL 8.0 为了更友好的支持 java 狂魔们所有的类实例时都会生成一个 uuid ,把 uuid 当成表的主键的问题,推出: • uuid_to_bin 把 32 位字符串压缩到 varbinary...隐式主键的列名只能是: my_row_id 2. 不能删除只有一个 my_row_id 隐式主键,除非同时指定其它主键 3.

1K20

Mybatis-Plus基础功能测试使用

其核心思想是:使用41bit作为毫秒数,10bit作为机器的ID(5个bit是数据中心,5个bit的机器ID),12bit作为毫秒内的流水号(意味着每个节点在每毫秒可以产生 4096 个 ID),最后还有一个符号位...ASSIGN_UUID 分配 UUID,Strinig INPUT 如果开发者没有手动赋值,则数据库通过自增的方式给主键赋值,如果开发者手动赋值,则存入该值。...ASSIGN_UUID 主键的数据类型必须是 String,自动生成 UUID 进行赋值 UUID 这需要你的id为String,也就是数据库id改为varchar类型。...现在叫ASSIGN_UUID 方法 主键生成策略 主键类型 说明 nextId ASSIGN_ID,ID_WORKER,ID_WORKER_STR Long,Integer,String 支持自动转换为...String类型,但数值类型不支持自动转换,需精准匹配,例如返回Long,实体主键就不支持定义为Integer nextUUID ASSIGN_UUIDUUID String 默认不含中划线的UUID

83410

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

选择卡号(cardno) 会员卡号(cardno)看起来比较合适,因为会员卡号不能为空,而且有唯一性,可以用来 标识一条会员 记录。...结论:千万 不能把会员卡号当做主键。   选择会员电话 或 身份证号 会员电话可以做主键吗?不行的。在实际操作中,手机号也存在 被运营商收回 ,重新发给别人用的情 况。 那身份证号行不行呢?好像可以。...所以,建议尽量不要用跟业务有关的字段做主键。毕竟,作为项目设计的技术人员,我们谁也无法预测 在项目的整个生命周期中,哪个业务字段会因为项目的业务需求而有重复,或者重用之类的情况出现。...另外,虽然有序UUID相比自增ID多了8个字节,但实际只增大了3G的存储空间,还可以接受。 在当今的互联网环境中,非常不推荐自增ID作为主键的数据库设计。更推荐类似有序UUID的全局 唯一的实现。...门店在添加会员的时候,先到总部 MySQL 数据库中获取这个最大值,在这个基础上加 1,然后用这个值 作为新会员的“id”,同时,更新总部 MySQL 数据库管理信息表中的当 前会员编号的最大值。

1.1K20

MySQL主键设计盘点

主键设计和应用原则 除了满足MySQL强制实施的规则(主键不可重复;一行中主键不可为空)之外,主键的设计和应用应当还遵守以下公认的原则: 不更新主键列中的值; 不重用主键列的值; 不在主键列中使用可能会更改的值...3、ID作为主键时在特定的环境会存在一些问题,比如需要排序的时候——UUID是无序的。 4、MySQL官方有明确的建议主键要尽量越短越好,36个字符长度的UUID不符合要求。...5、对MySQL索引不利:作为数据库主键,在InnoDB引擎下,UUID的无序性可能会引起数据位置频繁变动,严重影响性能。...关于MySQL 使用自增ID主键UUID 作为主键的性能比较可以查看参考【8】。 结论: 1、uuid主键适用于小规模分布式架构用。...2、在使用uuid作为主键的时候,最好设计createtime(创建时间)列和modifytime(修改时间)列以应付可能的排序等场景。

4.2K30

Hibernate 主键介绍

Hibernate有如下主键: ---- Native: Native主键生成方式会根据不同的底层数据库自动选择Identity、Sequence、Hilo主键生成方式。...特点是由Hibernate本身维护,适用于所有的数据库,不适合多进程并发更新数据库,适合单一进程访问数据库,不能用于群集环境。...---- Hilo: Hilo使用高低位算法生成主键,高低位算法使用一个高位值和一个低位值,然后把算法得到的两个值拼接起来作为数据库中的唯一主键。Hilo方式需要额外的数据库表和字段提供高位值来源。...特点是需要额外的数据库表的支持,能保证同一个数据库中主键主键的唯一性,但不能保证多个数据库之间主键的唯一性。...---- UUIDUUID使用128位UUID算法生成主键,能够保证网络环境下主键的唯一性,也就能够保证不同数据库及不同服务器下主键的唯一性。

64420

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

选择卡号(cardno) 会员卡号(cardno)看起来比较合适,因为会员卡号不能为空,而且有唯一性,可以用来 标识一条会员记录。...==结论:千万不能把会员卡号当做主键。== 选择会员电话 或 身份证号 会员电话可以做主键吗?不行的。在实际操作中,手机号也存在 被运营商收回 ,重新发给别人用的情况! 那身份证号行不行呢?好像可以。...毕竟,作为项目设计的技术人员,我们谁也无法预测在项目的整个生命周期中,哪个业务字段会因为项目的业务需求而有重复,或者重用之类的情况出现 经验:刚开始使用 MySQL 时,很多人都很容易犯的错误是喜欢用业务字段做主键...另外,虽然有序UUID相比自增ID多了8个字节,但实际只增大了3G的存储空间,还可以接受。 在当今的互联网环境中,非常不推荐自增ID作为主键的数据库设计。更推荐类似有序UUID的全局唯一的实现。...门店在添加会员的时候,先到总部 MySQL 数据库中获取这个最大值,在这个基础上加 1,然后用这个值作为新会员的“id”,同时,更新总部 MySQL 数据库管理信息表中的当 前会员编号的最大值。

36130

数据库避坑指南:MySQL里那些常见的错误设计规范,你中了几个?

这些错误最多的都是因为技术发展迅速,而且没有空闲时间去及时更新已经发布的内容所导致。为了避免给后面学习的人造成误解,我们今天来看一看 MySQL 设计规范中几个常见的错误例子。...主键的设计 错误的设计规范:主键建议使用自增 ID 值,不要使用 UUID,MD5,HASH,字符串作为主键 这个设计规范在很多文章中都能看到,自增主键的优点有占用空间小,有序,使用起来简单等优点。...,不能保证全局唯一,这就导致无法在分布式架构中使用; 公开数据值,容易引发安全问题,如果我们的商品 ID 是自增主键的话,用户可以通过修改 ID 值来获取商品,严重的情况下可以知道我们数据库中一共存了多少商品...因此,在并发场景中,更推荐 UUID主键或业务自定义生成主键。 我们可以直接在 MySQ L使用 UUID() 函数来获取 UUID 的值。...但是在并发量和数据量没那么大的情况下,还是推荐使用自增 UUID 的。大家更不要以为 UUID 不能主键了。

1K20

MySQL数据库表设计规范

3、UUID(),USER()这样的MySQL INSIDE 函数对于复制来说是很危险的,会导致主备数据不一致,所以请不要使用。如果一定要使用UUID作为主键,让应用程序来产生。...二、数据库对象设计规范 1、表 设计 a)在设计时尽量包含两个日期字段:crt_time(创建日期),upd_time(修改日期)且 非空, 对表的记录进行更新的时候,必须包含对 upd_time字段的更新...e)当表的字段数非常多时,可以将表分成两张表,一张作为条件查询表,一张作为详细内容表(主要是为了性能考虑)。 f)当字段的类型为枚举型或布尔型时,建议使用 char(1)类型。...g)同一表中,所有varchar字段的长度加起来,不能大于65535.如果有这样的需求,请使用 TEXT/LONGTEXT 类型。...d) 主键的内容不能被修改。 e) 外键约束一般不在数据库上创建,只表达一个逻辑的概念,由程序控制。 f) 当万不得已必须使用外健的话,必须在外健列创建 INDEX。

2.8K30

九种主流的分布式ID生成策略

不符合MySQL主键要求:MySQL官方有明确的建议,主键要尽量越短越好,因为太长对MySQL索引不利。...(如果UUID作为数据库主键,在InnoDB引擎下,UUID的无序性可能会引起数据位置频繁变动,严重影响性能。)2、数据库自增ID利用MySQL自增的ID,可以达到数据唯一标识。...但是分库分表后不能保证整体的ID唯一。为了避免这种情况,有以下两种方式可以解决该问题。全局主键表单独创建主键表维护唯一标识,作为ID的输出源可以保证整体ID的唯一。...由于多业务端可能同时操作,所以采用版本号version乐观锁方式更新。表结构如下:优缺点这种分布式ID生成方式不强依赖于数据库,不会频繁的访问数据库,对数据库的压力小很多。...4、Redis INCR作为共享内存,可以通过Redis的INCR命令来生成全局唯一ID。

12510

MyBatisPlus学习(1)

我们可以自定义ID生成 在User中,我们给id字段添加了@TableId注解,内部可以设定主键生成的方法 自 3.3.0 开始,默认使用雪花算法+UUID(不含中划线) //对应数据库中的主键(...}(雪花算法) * * @since 3.3.0 */ ASSIGN_ID(3), /** * 分配UUID (主键类型为 string)...ID作为主键时在特定的环境会存在一些问题,比如做DB主键的场景下,UUID就非常不适用: MySQL官方有明确的建议主键要尽量越短越好,36个字符长度的UUID不符合要求。...对MySQL索引不利:如果作为数据库主键,在InnoDB引擎下,UUID的无序性可能会引起数据位置频繁变动,严重影响性能。 2....核心思想: 使用41bit作为毫秒数,10bit作为机器的ID(5个bit是数据中心,5个bit的机器ID),12bit作为毫秒内的流水号(意味着每个节点在每毫秒可以产生4096个ID),最后还有一个符号位

12610
领券