【问题标题】:Insert different UUID on each row of a large table在大表的每一行插入不同的 UUID
【发布时间】:2022-03-09 23:30:26
【问题描述】:

我有一个大约 80k 行的表,其中包含导入的数据。表结构如下:

order_line_items  
  - id  
  - order_id  
  - product_id  
  - quantity  
  - price  
  - uuid  

导入时,order_id、product_id、数量和价格已导入,但 uuid 字段为空。

有没有办法,使用 mysql 的 UUID() 函数,批量添加一个 uuid 到表的每一行?我可以使用脚本循环遍历每一行并更新它,但如果有 MySQL 解决方案,那将是最快的。

【问题讨论】:

    标签: mysql


    【解决方案1】:

    uuid() 的每次调用都会返回一个不同的唯一值。

    这么简单

    UPDATE order_line_items SET uuid = uuid();
    

    应为每个uuid 字段分配一个唯一值。


    2022 年 3 月编辑

    请注意,使用此方法时,uuid 中只有几个字符会发生变化,这使得它们乍看之下相同,但实际上它们都是不同的。


    *编辑 2020 年 6 月*

    通过@RickJames(请参阅 cmets),我们试图了解一些人在运行上面的 Update 命令后如何获得相同的 UUID(它们应该都是不同的)。

    1. MySQL/MariaDB。问题标记为;确保您正在运行 MySQL 或 MariaDB,因为另一个 DBMS 可能不会在多行上呈现 UUID() 的 MySQL 行为

    2. 执行Update,如下所示,UUID() 是一个 MySQL 函数(因此()

    3. 检查接收更新的字段,它必须足够大以容纳36 字符

    另请参阅 DBA SE 上的 related question

    【讨论】:

    • @klendi - 什么版本的 MySQL/MariaDB/Aurora?向我们展示整个 SQL 语句。是在存储例程中吗?
    • 我得到了不同的值;我们在做什么不同?在dba.stackexchange.com/questions/269189/mysql-uuid-behavior中查看我的答案
    • @e2-e4 - MyISAM 在 9 个版本中的工作方式相同(单个更新的差异 uuid)。神秘。
    • 我使用 docker-compose 重现了 UPDATE 导致所有 UUID 相同的问题,这里是:gist.github.com/guss77/6747e48dd401d1ad36e5b4092ccfcfdd(还有一个视频)。我注意到,如果我在数据库完成初始化后执行更新(而不是作为设置的一部分),那么 UUID 是不同的 - 我认为这是一个性能问题,因为我观察到高性能 RDS 数据库的问题,但不是在本地慢速机器上进行测试。
    • 请注意,使用此方法只会在 uuid 中更改几个字符,这使得它们看起来乍一看是相同的,但实际上它们都是不同的。我花了整整 15 分钟的时间认为这在实际工作时失败了。我想知道这是否也在吸引其他人。
    猜你喜欢
    • 2023-01-10
    • 1970-01-01
    • 2010-11-12
    • 1970-01-01
    • 2011-06-11
    • 1970-01-01
    • 2021-03-08
    • 2019-09-04
    • 1970-01-01
    相关资源
    最近更新 更多