使用 PHP 和 mysql 将大数据导入到具有外键的多个表中



大数据插入多个表中的更好方法是什么 使用外键从 CSV 数据库?

我尝试将大型csv文件导入多个表 我使用正常的 Mysql 查询和循环 csv 数据,但它非常慢。 然后我尝试了"加载数据"方法。但只能将数据插入到具有相同列顺序的单个表中。

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

插入一个表的 ID 以连接另一个表。

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

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

您可以从以下方法一次性导入数百万条记录的大文件,请使用mysqlLoad 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 文件结构(列数(应该相同

-- 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);

相关内容

  • 没有找到相关文章

最新更新