[英]Howto IMPORT Java objects with relationship from .csv file into MySQL database?
假设我们有2个实体:
每个人都有一个地址(OneToOne关系)。 因此,地址实体将具有指向其关联个人的外键(person_id)。 您会如何建议呢?
到目前为止,我只找到了一种无需关系管理即可将单个实体导入mysql的方法:
LOAD DATA INFILE 'c:/tmp/file.csv'
INTO TABLE person
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS;
好的,很不幸,这将是一个艰难的答案,但是很可能这是不修改表以插入的唯一方法(强烈建议不要这样做)。
CREATE TEMPORARY TABLE `import` (
`person_name` varchar(300) CHARACTER SET latin1 NOT NULL,
`person_age` varchar(300) CHARACTER SET latin1 NOT NULL,
`address1` varchar(300) CHARACTER SET latin1 NOT NULL,
`city` varchar(300) CHARACTER SET latin1 NOT NULL
) ENGINE=MEMORY DEFAULT CHARSET=utf8;
做批量加载(如您在问题中所显示的)
从导入表中进行选择,并遍历每一行
插入地址表,获取last_insert_id,然后使用最后一个插入ID插入用户表
使用以下命令删除临时表: DROP TEMPORARY TABLE `import`;
如果您考虑删除自动递增的ID,而是改为使用UUID()
,则可以使用3个查询来执行此操作。
CREATE TEMPORARY TABLE `import` (
`uuid` char(36) CHARACTER SET latin1 NOT NULL,
`person_name` varchar(300) CHARACTER SET latin1 NOT NULL,
`person_age` varchar(300) CHARACTER SET latin1 NOT NULL,
`address1` varchar(300) CHARACTER SET latin1 NOT NULL,
`city` varchar(300) CHARACTER SET latin1 NOT NULL
) ENGINE=MEMORY DEFAULT CHARSET=utf8;
LOAD DATA INFILE 'c:/tmp/file.csv'
INTO TABLE person
(@dummy, person_name, person_age, address1, city)
SET uuid = UUID()
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS;
INSERT INTO address (id, address1, city)
SELECT uuid, address1, city
FROM `import`;
INSERT INTO person (address_id, person_name, person_age)
SELECT uuid, person_name, person_age
FROM `import`;
import
;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.