gpt4 book ai didi

mysql - 使用随机数据填充表时如何避免插入具有重复主键值的元组

转载 作者:行者123 更新时间:2023-11-29 16:06:57 25 4
gpt4 key购买 nike

出于测试目的,我需要用随机数据元组填充表。由于依赖性原因,我需要使用 MySQL5.6。由于 MySQL5.6 没有任何序列生成器或类似的功能来帮助将随机数据填充到表中,因此我能够收集信息以提出一个基本脚本来完成相同的工作。这是该脚本:

DELIMITER $$
CREATE PROCEDURE InsertRandomRows(IN NumRows INT)
BEGIN
DECLARE i INT;
SET i = 1;
START TRANSACTION;
WHILE i <= NumRows DO
INSERT INTO table_name (id, tel_mobile, created_at, age,
call_time, created_at, fio, address, comment) VALUES (
ROUND(RAND() * 100000000),
ROUND(RAND() * 1000000),
FROM_UNIXTIME(
UNIX_TIMESTAMP('2010-04-30 14:53:27')
+ FLOOR(0 + (RAND() * 63072000))
),
ROUND(RAND() * 1000000),
ROUND(RAND() * 1000000),
ROUND(RAND() * 1000000),
LEFT(CONCAT(
MD5( CAST( RAND() AS CHAR )),
MD5( CAST( RAND() AS CHAR )),
MD5( CAST( RAND() AS CHAR )),
MD5( CAST( RAND() AS CHAR ))
), 100),
LEFT(CONCAT(
MD5( CAST( RAND() AS CHAR )),
MD5( CAST( RAND() AS CHAR )),
MD5( CAST( RAND() AS CHAR )),
MD5( CAST( RAND() AS CHAR ))
), 100),
LEFT(CONCAT(
MD5( CAST( RAND() AS CHAR )),
MD5( CAST( RAND() AS CHAR )),
MD5( CAST( RAND() AS CHAR )),
MD5( CAST( RAND() AS CHAR ))
), 100)
);
SET i = i + 1;
END WHILE;
COMMIT;
END$$
DELIMITER ;


CALL InsertRandomRows(100000);

我的测试需要填充表,使其大小在 30GB 左右,为此我决定用以下内容填充表:

CALL InsertRandomRows(10000000);

相关表将 (id,created_at) 对作为主键。但是,在插入 1095600 行(大约所需行数的 10%)后,查询执行会由于尝试插入与之前插入的行具有相同 (id,created_at) 对的行而停止。为了防止这种情况,我可以对脚本进行任何修改吗?非常感谢任何见解。

最佳答案

根据 @Honeyboy Wilson 的评论,添加以下子句有助于解决我的错误。

........................
LEFT(CONCAT(
MD5( CAST( RAND() AS CHAR )),
MD5( CAST( RAND() AS CHAR )),
MD5( CAST( RAND() AS CHAR )),
MD5( CAST( RAND() AS CHAR ))
), 100)
);
SET i = i + 1;

ON DUPLICATE KEY UPDATE id=id+ROUND(RAND() * 100);
........................

关于mysql - 使用随机数据填充表时如何避免插入具有重复主键值的元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55649180/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com