首页 > 解决方案 > 如何将唯一的随机值添加到mysql中的列

问题描述

我想将 1000 个唯一随机值添加到表代理的 AgentID 列。

我使用 Upsert 忽略了重复值。到目前为止我做了什么:

DROP PROCEDURE IF EXISTS Generate_random;
DELIMITER $$
CREATE PROCEDURE Generate_random()
BEGIN
    Drop table if exists ai_training.`Agents`;
    CREATE TABLE ai_training.`Agents`(AgentID int PRIMARY KEY);

    SET @first = 1;
    SET @last = 1000;

    WHILE(@first <= @last) Do
        INSERT INTO ai_training.`Agents` VALUES(
                                                    FLOOR(RAND()*(2900000-2800000+1)+2800000)
                                                )
                                                ON DUPLICATE KEY UPDATE AgentID = FLOOR(RAND()*(2900000-2800000+1)+2800000);
        SET @first = @first + 1;
    END WHILE;
END$$


DELIMITER ;

CALL Generate_random();

Select * from ai_training.`Agents`;

问题是我需要 1000 个唯一的 agentid,而这段代码正在生成 1000 个 - 重复的。因此,如果它找到 6 个重复的 id,它会返回 994 行而不是 1000 行。

有什么办法可以做到这一点?无法更改随机 ID 生成部分。

标签: mysql

解决方案


CREATE PROCEDURE Generate_random()
BEGIN
    Drop table if exists ai_training.`Agents`;
    CREATE TABLE ai_training.`Agents`(AgentID int PRIMARY KEY);
    SET @last = 1000;
    WHILE (SELECT COUNT(*) FROM ai_training.`Agents`) < @last DO
        INSERT IGNORE INTO ai_training.`Agents` 
        VALUES
        (FLOOR(RAND()*(2900000-2800000+1)+2800000));
    END WHILE;
END

推荐阅读