【问题标题】:Large data import using PHP and mysql to multiple tables with foreign keys使用 PHP 和 mysql 将大数据导入到具有外键的多个表中
【发布时间】:2018-05-30 13:04:38
【问题描述】:

将大数据插入到多个表中的更好方法是什么 带有外键的 CSV 数据库?

我尝试将大型 csv 文件导入多个表 我使用带有循环 csv 数据的普通 Mysql 查询,但速度很慢。 然后我尝试了'LOAD DATA'方法。但是只能将数据插入具有相同列顺序的单个表中。

但是,它不起作用,因为我需要向多个表中插入数据并且需要使用最后一个

插入一个表的 id 以加入另一个表。

谁能建议一种将数据上传到多个表中的更好方法?

在这里,我使用 Zend Framework 和 Doctrine 来处理数据库操作。 但是,据我了解,Doctrain 比普通 MySQL 查询花费更多时间,这就是我使用直接 MySQL Query 的原因。

【问题讨论】:

标签: php mysql zend-framework doctrine-orm


【解决方案1】:

您可以通过以下方法一次性导入大约数百万条记录的大文件,请使用mysql Load DATA

前-

LOAD DATA LOCAL INFILE  
'/PATH_TO_YOUR_CSV/YOUR_CSV.csv'
INTO TABLE MY_TABLE
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"'
LINES TERMINATED BY '\n';

请记住您的表结构和您的 csv 文件结构(列数)应该相同

【讨论】:

  • 感谢您的重播。但是我需要使用外键将数据插入到多个表中。即,一个表的最后插入ID应该需要作为外键插入到另一个表中。
【解决方案2】:
-- import the csvfile to this temp table , the column just like your csv header
create table IF NOT EXISTS my_db.csv_file (

    id int auto_increment primary key,
    vendor_name varchar(200),
    product_name varchar(200),
    product_price double
    
);

-- table one
create table if not exists my_db.product(
    id int auto_increment primary key,
    vendor_id int, -- foreign
    name varchar(200),
    price double
)

-- table two
create table if not exists my_db.vendor(

    id int auto_increment primary key,
    name varchar(200)
)

-- import csv data ,you can use LOAD command 
insert into my_db.csv_file(vendor_name,product_name,product_price)values
('A','book',1.00),
('B','computer',2.00),
('C','phone',3.00);


-- step 1:

insert into my_db.vendor(name)
(select vendor_name from my_db.csv_file group by vendor_name);

-- step 2:
insert into my_db.product(vendor_id , name , price)
(select vendor.id,temp.product_name,temp.product_price from my_db.csv_file as temp left join my_db.vendor as vendor on vendor.name = temp.vendor_name);

【讨论】:

  • 请分享更多细节。如果初始查询太慢,您的方法如何更好地处理这个问题?
猜你喜欢
  • 2013-07-21
  • 2019-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多