大数据插入多个表中的更好方法是什么 使用外键从 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);