【问题标题】:MYSQL: How to update unique random number to existing rowsMYSQL:如何将唯一随机数更新到现有行
【发布时间】:2021-06-27 18:59:10
【问题描述】:

这是我对这个网站的第一个问题,如果我使用了错误的关键字,我很抱歉。几天来我一直遇到一个问题。

问题是,我有一个名为 property 的 MYSQL 表,我想在其中添加一个 ref 编号,该编号将是一个唯一的 6 位非增量编号,因此我更改表以添加一个名为 property_ref 的新列,该列具有默认值为 1。

ALTER TABLE property ADD uniqueIdentifier INT DEFAULT (1) ;

然后我编写一个脚本首先生成一个数字,然后检查它是否存在,如果不存在,则使用随机数更新行

这是我试过的sn-p,

with cte as (
select subIdentifier, id from (
    SELECT id, LPAD(FLOOR(RAND() * (999999 - 100000) + 100000), 6, 0) AS subIdentifier
    FROM property as p1
    WHERE "subIdentifier" NOT IN (SELECT uniqueIdentifier FROM property as p2) 
) as innerTable group by subIdentifier
)
UPDATE property SET uniqueIdentifier =  (
  select subIdentifier from cte as c where c.id = property.id 
) where property.id != ''

这个查询返回几乎所有行的一组记录,但我有一个总共 20000 个条目的表, 但是这个查询填满了 ~19000 并且其余的行都是空的。

这是一个电流输出 [当前结果图片]

如果有人可以提供帮助,我非常感谢。

谢谢

【问题讨论】:

  • 我想知道你是否得到空值,因为它两次生成相同的值;在这种情况下,您的更新将不会执行。如果您多次运行更新脚本,相同的行是否总是空白?
  • 是的,你没看错。错误在于生成随机数。并非所有记录都是唯一的

标签: mysql sql mysql-workbench mysqldbcompare


【解决方案1】:

我不会尝试随机生成表中不存在的唯一数字,而是尝试使用 ID 列作为种子随机生成数字的方法;只要身份证号码是唯一的,新号码也将是唯一的。这在技术上并非完全“随机”,但可能足以满足您的需求。

https://www.db-fiddle.com/f/iqMPDK8AmdvAoTbon1Yn6J/1

update Property set 
UniqueIdentifier =   round(rand(id)*1000000)
where UniqueIdentifier is null

SELECT id,  round(rand(id)*1000000) as UniqueIdentifier FROM test;

【讨论】:

  • 非常感谢,你拿到了我的钥匙!无论如何,我不能赞成你的信息,因为我没有太多的声誉,但非常感谢:)
  • 没问题;很高兴它对你有用!我认为您可以将答案标记为已接受,这将使该问题不在“未回答的问题”列表中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-11
  • 2020-12-01
  • 1970-01-01
相关资源
最近更新 更多