【问题标题】:Generate Random Names For MySQL Database为 MySQL 数据库生成随机名称
【发布时间】:2015-03-06 11:09:44
【问题描述】:

我需要在三个字段中生成大约 2,000 个随机名称以插入到 MySQL 表中:FirstName、LastName、Gender(根据 ISO 5218)。为了帮助解决这个问题,我列出了 50 个男性名字、50 个女性名字和 100 个姓氏。如有必要,这些可以成为临时数据库表。我觉得在 MySQL 中做这件事可能是一个明智的步骤。我不知道如何编写 SQL 代码来实现这一点。这可能吗?

【问题讨论】:

    标签: mysql random


    【解决方案1】:

    您可以创建一个 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 编码员,所以您可能想检查一下这是否有效。但这似乎是解决问题的最有效方法,因为您避免了迭代。

    【讨论】:

    • 基本上我现在正在使用类似的东西,但正在扩展它以在一个范围内添加随机 DOB,并且可能必须在最终运行之前添加随机高度和质量!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-16
    • 1970-01-01
    • 2011-10-18
    • 2013-01-19
    • 1970-01-01
    相关资源
    最近更新 更多