0

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

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

ALTER TABLE property ADD uniqueIdentifier INT DEFAULT (1) ;

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

这是我试过的片段,

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,其余行为空。

这是当前输出[当前结果图片]

1

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

谢谢

4

1 回答 1

0

我不会尝试随机生成表中不存在的唯一数字,而是尝试使用 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;
于 2021-04-01T12:37:49.180 回答