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

为什么在mysql中设置uuid = (select uuid());update不适用于此查询?

在MySQL中,设置uuid = (select uuid())的目的是将一个随机生成的UUID值赋给uuid字段。然而,使用这种方式在UPDATE查询中可能会导致不适用的情况。

原因如下:

  1. 子查询的结果集只会在查询开始时执行一次,然后将结果缓存起来。在UPDATE查询中,如果有多行需要更新,那么子查询的结果将被复用,导致每一行的uuid字段都被赋予相同的值。
  2. UPDATE查询是逐行执行的,对于每一行,MySQL会先计算SET子句中的表达式,然后再将结果赋给相应的字段。在这个过程中,子查询的结果已经被缓存起来,所以无论UPDATE查询更新多少行,都只会使用同一个UUID值。

因此,使用uuid = (select uuid())的方式在UPDATE查询中不适用,因为它无法为每一行生成唯一的UUID值。

如果想要为每一行生成唯一的UUID值,可以考虑使用MySQL的UUID()函数,它会在每次调用时生成一个新的UUID值。可以将UPDATE查询修改为以下形式:

代码语言:txt
复制
UPDATE table_name SET uuid = UUID();

这样,每一行都会被赋予一个唯一的UUID值。

关于UUID的概念、分类、优势和应用场景,UUID是通用唯一标识符(Universally Unique Identifier)的缩写,它是一个128位的数字标识符,用于在分布式系统中唯一标识实体。

UUID的优势在于:

  • 唯一性:UUID的生成算法保证了生成的标识符在全球范围内的唯一性。
  • 无序性:UUID的生成算法不依赖于任何中央控制器,可以在分布式环境中独立生成,不会出现冲突。
  • 高性能:UUID的生成速度很快,可以满足大规模分布式系统的需求。

UUID的应用场景包括:

  • 数据库主键:可以作为数据库表的主键,确保每一行数据的唯一性。
  • 分布式系统:可以用于在分布式系统中唯一标识实体,如分布式缓存、分布式文件系统等。
  • 日志跟踪:可以用于跟踪日志,方便定位和追踪问题。

腾讯云提供了多个与UUID相关的产品和服务,例如:

  • 腾讯云数据库 MySQL:https://cloud.tencent.com/product/cdb
  • 腾讯云分布式缓存 Redis:https://cloud.tencent.com/product/redis
  • 腾讯云对象存储 COS:https://cloud.tencent.com/product/cos

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

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

相关·内容

Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day40】—— 数据库7

我们知道MySQL删除数据的方式有多种比如DELETE、TRUNCATE、DROP等,都属于物理删除,但在实际场景,很多时候是不能直接的。   ...所以 SQL 里面 DELETE 真实生产环境里都不应该出现,除DBA账号外的其他用户不应有DELETE、TRUNCATE、DROP权限,而只有UPDATE权限。   ...我还见过有单位将MySQLupdate命令封装成删除命令的~~然后用户只能看到表或视图中is_deleted=0的数据,好像是实现了权限隔离,其实就是闲的慌。   ...使用UUID   这时我们首先想到的解决方法可能是以UUID为主键,对于InnoDB这种聚集主键类型的引擎来说,数据会按照主键进行排序,由于UUID的无序性,InnoDB会产生巨大的IO压力,此时不适合使用...修改MySQL默认自动增长的步长 -- 设置序列的增长值 set global auto_increment_increment=1; 方法二:通过集群编号加集群内的自增(auto_increment

52110

常用数据库 SQL 命令详解(下)

函数是可以嵌入sql中使用的,可以select调用,而存储过程不行。...='trig1'; 所有触发器信息都存储information_schema数据库下的triggers表,可以使用SELECT语句查询,如果触发器信息过多,最好通过TRIGGER_NAME字段指定查询...五、序列 MySQL ,可以有如下几种途径实现唯一值: 自增序列 程序自定义 UUID() 函数 UUID_SHORT() 函数 5.1、自增序列 mysql,一般我们可以给某个主键字段设置为自增模式... MySQLUUID()函数,前三组数字从时间戳中生成,第四组数字暂时保持时间戳的唯一性,第五组数字是一个IEEE 802节点标点值,保证空间唯一。...select uuid(); 5.4、UUID_SHORT() 函数 MySQL 5.1 之后的版本,提供UUID_SHORT()函数,生成一个64位无符号整数,java可以Long类型接受

92920

分布式ID算法&实现

3、UUID UUID是Universally Unique Identifier的缩写,它是一定的范围内(从特定的名字空间到全球)唯一的机器生成的标识符,UUID是16字节128位长的数字...缺点: UUID过长,16字节128位,通常以36长度的字符串表示,很多场景不适用,比如用UUID做数据库索引字段。 没有排序,无法保证趋势递增。...因为UUID是随机的,保存数据的时候不是特别高效,查询也不方便。 这种方案一般的比较少,除非不用存储在数据库。 四、实现方案 上面讲了大概的理论,我们看下目前比较著名的实现方案。...4.1.1 Leaf-segment方案 以MySQL举例,利用给字段设置auto_increment和auto_increment_offset来保证ID自增,每次业务使用下列SQL读写MySQL得到...实现思路是:预分配+分号段共享存储+存储和缓存分离 容灾方面,先是主从架构 ? 后来再采用动态路由表的方案来解决配置不一致的问题, ?

1.1K30

MySQL 使用规范 —— 如何建好字段和索引

IPV4,无符号 INT 存储 IPV6,VARBINARY存储 JSON MySql 8.x 新增特性 update_time 设置 on update 更新属性 3....* 单个索引,每个索引记录的长度不能超过64KB 利用覆盖索引来进行查询操作,避免回表。另外建组合索引的时候,区分度最高的最左边。...监控活动和性能: MySQL,你可以使用以下命令来监控MySQL服务器的活动和性能: SHOW PROCESSLIST;:该命令用于显示当前正在运行的所有MySQL连接和查询。...连接数查询和配置 查看MySQL服务器的可用连接数和设置连接数,可以使用以下方法: 查看当前可用连接数: 使用命令行客户端登录到MySQL服务器。...另外,某些MySQL版本或发行版可能对最大连接数有特定的限制,请确保你的设置允许范围内。

54530

分布式全局唯一ID生成方案(附源码)

以往单体系统,ID我们常用主键自增进行设置,这种ID生成方法单体项目是可行的,但是对于分布式系统,分库分表之后,就不适应了,比如订单表数据量太大了,分成了多个库,如果还采用数据库主键自增的方式,就会出现在不同库...这个版本的UUID实际较少用到。 版本3:基于名字的UUID(MD5)- 版本3 基于名字的UUID通过计算名字和名字空间的MD5散列值得到。...,很多场景不适用 MAC 地址提供了唯一性的保证,但也带来安全风险,最糟的是它是字符串形式,占用空间大,查询性能低,无法保证趋势递增 ID作为主键时特定的环境会存在一些问题,比如做DB主键的场景下,UUID...就非常不适用: MySQL官方有明确的建议主键要尽量越短越好,36个字符长度的UUID不符合要求 对MySQL索引不利:如果作为数据库主键,InnoDB引擎下,UUID的无序性可能会引起数据位置频繁变动...对于MySQL性能问题,可用如下方案解决:分布式系统我们可以多部署几台机器,每台机器设置不同的初始值,且步长和机器数相等。比如有两台机器。

63130

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

那么,系统中就有了张三买书的流水记录,如下所示: image-20230705100408722 接着,我们查询一下 2020 年 12 月 01 日的会员销售记录: mysql> SELECT b.membername...导致查询时: mysql> SELECT b.membername,c.goodsname,a.quantity,a.salesvalue,a.transdate -> FROM demo.trans...MySQL 8.0还解决了UUID存在的空间占用的问题,除去了UUID字符串无意义的"-"字符串,并且将字符串二进制类型保存,这样存储空间降低为了16字节。...可以通过MySQL8.0提供的uuid_to_bin函数实现上述功能,同样的,MySQL也提供了bin_to_uuid函数进行转化: SET @uuid = UUID(); SELECT @uuid,uuid_to_bin...可以总部 MySQL 数据库,有一个管理信息表,在这个表添加一个字段,专门用来记录当前会员编号的最大值。

35430

MyBatisPlus学习(1)

我们可以自定义ID生成 User,我们给id字段添加了@TableId注解,内部可以设定主键生成的方法 自 3.3.0 开始,默认使用雪花算法+UUID(不含划线) //对应数据库的主键(...UUID往往使用字符串存储,查询的效率比较低。 不易于存储:UUID太长,16字节128位,通常以36长度的字符串表示,很多场景不适用。...ID作为主键时特定的环境会存在一些问题,比如做DB主键的场景下,UUID就非常不适用: MySQL官方有明确的建议主键要尽量越短越好,36个字符长度的UUID不符合要求。...对MySQL索引不利:如果作为数据库主键,InnoDB引擎下,UUID的无序性可能会引起数据位置频繁变动,严重影响性能。 2....我们可以注解@TableField设置填充方案: @TableField(fill = FieldFill.INSERT) private Data createTime; @TableField(

12210

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

而且由于 UUID 能保证全局唯一,因此使用 UUID 的收益远远大于自增 ID。可能你已经习惯了自增做主键,但是并发场景下,更推荐 UUID 这样的全局唯一值做主键。...但是海量互联网业务的设计标准,并不推荐 DECIMAL 类型,而是更推荐将 DECIMAL 转化为整型类型。 也就是说,金融类型更推荐使用用分单位存储,而不是元单位存储。...,都是简单的将字段设计为 tinyint,然后字段里备注 0 为什么状态,1 为什么状态。...然而,MySQL 8.0 版本,子查询的优化得到大幅提升,所以新版本的MySQL可以放心的使用子查询。...即, MySQL 8.0 ,优化器会自动地将 IN 子查询优化,优化为最佳的 JOIN 执行计划,这样一来,会显著的提升性能。

1K20

MySQL 主键自增注意事项

很多小伙伴应该知道, MySQL 主键不应该使用随机字符串。但是主键不用随机字符串什么?主键自增?主键自增就是最佳方案吗?有没有其他坑?今天我们就来讨论下这个话题。 1....为什么不用 UUID 经过上篇文章的介绍,我们知道 MySQL ,主键索引就是聚簇索引,MySQL的数据是根据主键值聚集在一起的,聚簇索引是一棵 B+Tree,这棵树的数据是有序的。...基于上面的分析,我们 MySQL 尽量不使用 UUID 作为主键,不用 UUID,可能会有小伙伴想到,那我使用主键自增行不行?...ON DUPLICATE KEY UPDATE 不算是 simple insert。 load data 或者 insert into user select ... from .......松哥之前写过一篇文章和小伙伴们介绍 MySQL binlog 日志文件的三种格式: row:binlog 记录的是具体的值而不是原始的 SQL,举一个简单例子,假设表中有一个字段是 UUID,用户执行的

5710

Mybatis(一)走进Mybatis与FisrtExample

Mybatis可以将Sql语句配置XML文件,避免 将Sql语句硬编码Java类。 MyBatis 是支持普通 SQL查询,存储过程和高级映射的优秀持久层框架。...文件,即使 sql 语句变化了,我们也不需要对 Java 代码进行修改,重新编译 3)问题三: PreparedStatement 设置参数,对占位符设置值都是硬编码Java代码,不利于系统维护...-- 将插入的数据主键返回到 user 对象 keyProperty:将查询到的主键设置到parameterType 指定到对象的那个属性 select...-- 将插入的数据主键返回到 user 对象 流程是:首先通过 select UUID()得到主键值,然后设置到 user 对象的id进行 insert 操作...keyProperty:将查询到的主键设置到parameterType 指定到对象的那个属性 select UUID():得到主键的id值,注意这里是字符串

63420

近万字MySQL主从配置攻略,包教包会

我们先在从库的数据库中生成一个UUID mysql>select UUID(); 将数据库查询出来的这个UUID复制出来,然后编辑从库的UUID配置文件 如果你也安装的跟我一样,那么这个配置文件的路径就应该在这里...: [root@localhost ~]# vi /usr/local/mysql/data/auto.cnf 进去后,将一串32位长的UUID,替换成我们刚在数据库查询生成的UUID即可。...那么你可以主服务器上创建一个表,然后在从服务器上查询刚创建的这个表,看是否存在就可以啦。...Tips 1、关于增删改查,主从数据不一致问题: #select 语句,暂时没有发现问题 #insert 语句,暂时没有发现问题 #update 语句,暂时没有发现问题 #delete 语句...,主库删除多条数据,发现数据不一致 原因:主库的logbin的确有执行删除语句,但是在从库的logbin却没有删除语句 解决:使用 use database 选取当前数据库架构的需要操作的数据库

14310

PHP转JAVA学习遇到的一系列问题记录

{ @Autowired JdbcTemplate jdbcTemplate; // JdbcTemplate,除了查询有几个API之外,新增、删除与修改统一都使用update...; return jdbcTemplate.update(sql, id); } // 查询查询就不使用update方法了 // queryForObject...`即可以写sql,支持使用`#{}`占位符参数,多个参数时可以`@Param`进行标记匹配,示例如下: // `@Select("SELECT * FROM users LIMIT #{offset...MyBatis,DAO可以使用MyBatis的SqlSession和SqlSessionFactory来管理数据库连接和事务,并且可以使用MyBatis的动态SQL功能执行高度灵活的查询。...<packaging>pom</packaging>的理解 记得设置文件编码全都改成UTF-8 setting - File Encodings设置,全局的、项目的、属性文件的都改成UTF-8

32730

Spring boot Mybatis-XML方式通用Mapper插件(七)

style: camelhump 可配置参数介绍 UUID设置生成UUID的方法,需要用OGNL方式配置,不限制返回值,但是必须和字段类型匹配 IDENTITY:取回主键的方式 DB2: VALUES...ORDER:的order属性,可选值为BEFORE和AFTER catalog:数据库的catalog,如果设置该值,查询的时候表名会带catalog设置的前缀 schema:同...如果你的实体类包含了不是数据库表的字段,你需要给这个字段加上@Transient注解,这样通用Mapper处理单表操作时就不会将标注的属性当成表字段处理!...主键策略(仅用于insert方法) 通用Mapper还提供了序列(支持Oracle)、UUID(任意数据库,字段长度32)、主键自增(类似Mysql,Hsqldb)三种方式,其中序列和UUID可以配置多个...删除.png Select 1.SelectMapper 接口:SelectMapper 方法:List select(T record); 说明:根据实体的属性值进行查询查询条件使用等号

3.5K10

第10章_索引优化与查询优化

③ 对于返回结果集比较大的子查询,其对查询性能的影响也就越大。 ** MySQL ,可以使用连接(JOIN)查询来替代子查询。...答: # 12.3 关于 SELECT (*) 查询,建议明确字段,不要使用 * 作为查询的字段列表,推荐使用 SELECT 查询。...认识 UUID为什么 UUID 是全局唯一的? 为什么 UUID 占用 36 个字节? 为什么 UUID 是无序的?...为什么UUID占用36个字节? UUID 根据字符串进行存储,设计时还带有无用 "-" 字符串,因此总共需要 36 个字节。 为什么UUID是随机无序的呢?...MySQL 8.0 还解决了 UUID 存在的空间占用的问题,除去了 UUID 字符串无意义的 "-" 字符串,并且将字符串二进制类型保存,这样存储空间降低为了 16 字节。

36930

Docker安装使用MySQL 高可用之MGR(多主同时写入)

主库(172.72.0.15)上执行 6.2、其他节点加入MGR,在从库(172.72.0.16,172.72.0.17)上执行 七、多主和单主模式切换 7.1、查询当前模式 7.2、函数实现多主和单主切换...节点 9.2、新节点安装MGR插件 9.3、新节点设置复制账号 9.4、原3节点执行修改参数 9.5、新节点加入 9.6、查看所有节点 十、重置MGR配置 一、创建3台MySQL环境 #...,@@server_uuid" mysql -uroot -plhr -h192.168.1.35 -P33066 -e "select @@hostname,@@server_id,@@server_uuid...@@hostname,@@server_id; select * from lhrdb.tb1; -- 3个节点查询出来的值一样 MySQL [(none)]> select * from lhrdb.tb1..." mysql -uroot -plhr -h192.168.1.35 -P33066 -e "select @@hostname,@@server_id,@@server_uuid" mysql -uroot

2.7K30
领券