mysql - 如何将唯一的随机值添加到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 生成部分。
解决方案
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
推荐阅读
- blockchain - 如何将我的 Dapp 连接到钱包以便用户执行交易?
- spring - spring security SAML:从数据库配置元数据 url
- amazon-s3 - 允许访问多个帐户以访问 S3 存储桶的子集
- scala - 使用可注入参数创建类
- google-app-engine - GAE 基本缩放覆盖内存限制
- wso2 - 如何将json转换为wso2 esb中的路径变量数据?
- ads - uBlock 规则不适用
- java - 当我将数据从 java 代码添加到 MYSQL Server 时,它不接受 Null 值,如何让它接受 Null 值?
- flutter - Flutter firebase 消息传递 v9.0.0 - 不触发事件
- python - Pyspark - 循环和范围内 - 仅获取最后一个值