首页
学习
活动
专区
工具
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

54010
  • 常用数据库 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类型接受

    95220

    分布式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.2K30

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

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

    89530

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

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

    1K30

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

    那么,系统中就有了张三买书的流水记录,如下所示: 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 数据库,有一个管理信息表,在这个表添加一个字段,专门用来记录当前会员编号的最大值。

    43930

    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值,注意这里是字符串

    66720

    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(

    14310

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

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

    1.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,用户执行的

    10410

    SQL 稍复杂一点语法的学习笔记

    如: 查询其他系臂计算机起任一学生年龄小的学生信息: SELECT name, birth_year FROM t_student WHERE birth_year > ANY ( SELECT...比如 TINYINT UNSIGNED 表示 uint8 浮点数值 浮点数分别是 FLOAT 和 DOUBLE, 实际上 MySQL 场景, 不太建议使用浮点数, 也不太需要使用。...获得 last_update_id 的方法 这个问题经常出现在我们使用 MySQL 当作消息队列来使用的场景下。...解决方法, 可以表中加入一个 uuid 字段, 每次执行的时候都 update 一个唯一 id, 如果更新数量大于 0 的话再 select 就行。..., 复用连接的情况下, 最后一条 SET NULL 语句就是弃这个临时变量 参考资料: 转: MYSQL获取更新行的主键ID MySQL Delete Session Variable 数据库的复制和转移

    14620

    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

    42630

    MySQL数据库进阶-SQL优化

    专栏系列:MySQL数据库进阶 前言 在看此篇前,建议先阅读MySQL索引,对索引有个基本了解:MySQL数据库进阶-索引-CSDN博客 进行SQL优化前,我们必须先了解SQL查询的性能分析,为什么这条...MySQL的慢查询日志默认没有开启,需要在MySQL的配置文件(/etc/my.cnf)配置如下信息: # 开启慢查询日志开关 slow_query_log=1 # 设置查询日志的时间为2秒,SQL...查询的序列号,表示查询执行 select 子句或者操作表的顺序(id相同,执行顺序从上到下;id不同,值越大越先执行) select_type:表示 SELECT 的类型,常见取值有 SIMPLE...(简单表,即不适用表连接或者子查询)、PRIMARY(主查询,即外层的查询)、UNION(UNION的第二个或者后面的查询语句)、SUBQUERY(SELECT/WHERE之后包含了子查询)等...# 客户端连接服务端时,加上参数 --local-infile(这一行bash/cmd界面输入) mysql --local-infile -u root -p # 设置全局参数local_infile

    16110

    近万字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 选取当前数据库架构的需要操作的数据库

    16910

    8 种方案解决重复提交问题!你选择哪一种呀?

    1.什么是幂等 我们编程中常见幂等 1)select查询天然幂等 2)delete删除也是幂等,删除同一个多次效果一样 3)update直接更新某个值的,幂等 4)update更新累加操作的...3)session存放一个特殊标志 服务器端,生成一个唯一的标识符,将它存入session, 同时将它写入表单的隐藏字段,然后将表单页面发给浏览器, 用户录入信息后点击提交,服务器端,获取表单隐藏字段...4)其他借助使用header头设置缓存控制头Cache-control等方式 比较复杂 不适合移动端APP的应用 这里不详解 5)借助数据库 insert使用唯一索引 update使用 乐观锁 version...版本法 这种大数据量和高并发下效率依赖数据库硬件能力,可针对非核心业务 6)借助悲观锁 使用select ... for update ,这种和 synchronized 锁住先查再insert...生成固定签名 提交到后端 根据后端解析统一的签名作为 每次提交的验证token 去缓存处理即可. 8)借助分布式redis锁 (参考其他) pom.xml 添加上 starter-web、

    42100
    领券