【问题标题】:How to insert dummy data into MySQL?如何将虚拟数据插入 MySQL?
【发布时间】:2017-11-19 23:19:15
【问题描述】:

我得到了一个大学项目,我必须在其中创建一个包含一些选择的数据库。我选择为航班预订系统创建一个数据库。这是非常基本的。

但是,我正在插入虚拟数据,并且对于其中一列 FlightNumber,我需要它对于多个输入都相同。有没有办法做到这一点。我还需要其他表中的值。

例如,FLNum 在航班中是主键,在乘客中是外键。有没有网站可以做到这一点?

更新:需要100000条记录

桌子:乘客

BookRef (PK)
Fname
Lname
Gender
Date_Depart
Date_Return
FLNum (FK)

表格:航班

FLNum (PK)
Date_Depart
Tail_No
CID (FK)
FID (FK)

表:船长

CID (PK)
Fname
Lname

表:First_Officers

FID (PK)
Fname
Lname

乘客样本价值:

BookRef (PK) 4MTH2R
Fname  Hortense
Lname Jacqueminot
Gender Female
Date_Depart 2017-12-26
Date_Return 2017-12-31
FLNum (FK) KQU59GS

【问题讨论】:

  • 你的困难是什么?你能不能只编航班号?
  • 我会,但不幸的是,需要有 100000 条记录
  • 好的。首先显示航班表的结构,以及各个列有哪些选项(我在想象诸如 STD、运营商、FromAirport = NYC 或 ToAirport = FCO 之类的东西)。您可能会也可能不会在 SQL 中执行此操作,所以 - 您知道哪些脚本语言(如果有的话)?
  • 只是 SQL。今年才开始做数据库
  • 没关系。首先编辑您的问题,然后添加航班结构。也可以尝试添加两个或三个 t-uples 样本数据,只是为了给出想法。

标签: mysql sql


【解决方案1】:

你可以使用this PHP库。这个PHP库可以为你生成假数据。

【讨论】:

    【解决方案2】:

    概述

    这里有一个问题,我们不希望记录完全随机(例如 Etaoin Asdfsdasdf 船长于 13-09-1045 离开)。因此,我们将在 MySQL 中将 FLNum 声明为整数、主键、auto_increment,并可能将表定义更改为从 1000000 而不是 1 开始(只是让所有数字或多或少具有相同的位数)。但这是小土豆。

    然后我们希望出发日期在给定范围内,尾号、船长和副驾驶也一样。

    因此,我们开始估算表的基数。我们想要 10 万次飞行,用 1000 架飞机来做这件事似乎是合理的,这意味着假设有 200 名机长和尽可能多的副驾驶。

    然后我们需要一个包含姓名和姓氏的辅助(“种子”)表,我们可以在GitHub 上找到它。我们将建立一个 XName 和一个 XSurname 表。

    船长和副驾驶

    我们需要 200 名船长,或多或少:

    INSERT INTO Captains (`name`,`surname`)
        SELECT `name`, `surname` FROM XNames JOIN XSurnames 
        ORDER BY RAND() LIMIT 200;
    

    如果针对成千上万的 Names/Sur​​names 表运行上述操作,可能需要 长时间 运行,因此您可能希望首先创建两个临时表,例如 200名字和两百个姓氏通过运行

    CREATE TEMPORARY TABLE tbl1 AS 
        SELECT * FROM XSurnames 
        ORDER BY RAND() LIMIT 200;
    

    然后连接两个临时表(200*200 给出 40000,这有助于降低完全重复的名称。然后您将从这 40k 中选择 200 个条目)。

    出发日期

    我们创建一个新表 DepartureDates,其中只有一列 DepartureDate。然后我们插入一个日期。

    INSERT INTO DepartureDates (DepartureDate) VALUES ('2017-12-01');
    

    然后我们插入后天:

    INSERT INTO DepartureDates 
        SELECT DATE_ADD(DepartureDate, INTERVAL 1 DAY) FROM DepartureDates;
    

    现在表格中有 2 个日期(我们称它们为 0 和 1)。然后下面的命令将选择 0 和 1 并添加 2 和 3:

    INSERT INTO DepartureDates 
        SELECT DATE_ADD(DepartureDate, INTERVAL 2 DAY) FROM DepartureDates;
    

    使用 INTERVAL 4 DAY 再次运行命令将输入​​其他四个日期。使用第四个命令和 8 DAY,我们输入其他 8 个日期,现在有 16 天。第五条命令使总数达到三十二天。只需 8 个命令,您就可以输入多个月份的日期。

    航班

    现在您有了日期和航班(机场等其他数据类似),您可以运行输入:

    CREATE PROCEDURE populate()
    BEGIN
        DECLARE i int DEFAULT 1;
        WHILE i <= 100000 DO
            INSERT INTO flights (`date`, `cid`, `fid`, whatever)
                 VALUES (
                (SELECT DepartureDate FROM DepartureDates ORDER BY RAND() LIMIT 1) AS `date`,
                (SELECT cid FROM Captains ORDER BY RAND() LIMIT 1) AS cid,                
                (SELECT cid FROM FirstOfficers ORDER BY RAND() LIMIT 1) AS fid,
                ... et cetera ...
            );
            SET i = i + 1;
        END WHILE;
    END 
    

    然后,CALL populate(); 将(在很长一段时间后)为您提供所需的数据。自动增量将处理 FLNum。

    ===

    (或者如果你可以在bash、PHP、Perl 或 python 中运行脚本,我可以为你写一个更简单的生成器)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-13
      • 1970-01-01
      • 2011-08-06
      • 1970-01-01
      • 1970-01-01
      • 2019-01-20
      相关资源
      最近更新 更多