【发布时间】:2015-03-06 11:09:44
【问题描述】:
我需要在三个字段中生成大约 2,000 个随机名称以插入到 MySQL 表中:FirstName、LastName、Gender(根据 ISO 5218)。为了帮助解决这个问题,我列出了 50 个男性名字、50 个女性名字和 100 个姓氏。如有必要,这些可以成为临时数据库表。我觉得在 MySQL 中做这件事可能是一个明智的步骤。我不知道如何编写 SQL 代码来实现这一点。这可能吗?
【问题讨论】:
我需要在三个字段中生成大约 2,000 个随机名称以插入到 MySQL 表中:FirstName、LastName、Gender(根据 ISO 5218)。为了帮助解决这个问题,我列出了 50 个男性名字、50 个女性名字和 100 个姓氏。如有必要,这些可以成为临时数据库表。我觉得在 MySQL 中做这件事可能是一个明智的步骤。我不知道如何编写 SQL 代码来实现这一点。这可能吗?
【问题讨论】:
您可以创建一个 FIRST_NAMES 表,插入所有名字(男性和女性),然后创建一个 LAST_NAMES 表,然后创建 RANDOM_NAMES 表,执行以下操作:
INSERT INTO RANDOM_NAMES
VALUES (SELECT first FROM FIRST_NAMES
ORDER BY RAND()
LIMIT 1,
SELECT last FROM LAST_NAMES
ORDER BY RAND()
LIMIT 1)
ORDER BY RAND() 以随机顺序返回表格行,LIMIT 1 只返回第一行,这就是你想要的。
注意上面的代码插入了单行,所以如果要插入2000行,就需要迭代。对于迭代部分,this topic 的第一个答案似乎是一个不错的选择。
然而,这似乎是一种非常低效的方法。更好的方法是使用 INSERT-SELECT 构造。您将在此处使用 FIRST_NAMES 和 LAST_NAMES 表的笛卡尔积创建一个表,对行进行随机排序,并将查询限制为 2000 行,然后将这些行插入到您的新表中。
类似:
INSERT INTO RANDOM_NAMES (first_name, last_name)
SELECT first, last
FROM FIRST_NAMES, LAST_NAMES
ORDER BY RAND()
LIMIT 2000
我不是 SQL 编码员,所以您可能想检查一下这是否有效。但这似乎是解决问题的最有效方法,因为您避免了迭代。
【讨论】: