我需要根据某些条件使用load data infile更新表中的现有行,这可能吗?
load data infile 'E:/xxx.csv' into table tld_tod @aaa, @xxx_date, @ccc fields terminated by ',' LINES TERMINATED BY '\r\n' set xxx = str_to_date(@xxx_date, '%d-%b-%y') where xxx is not null and aaa=@aaa
答案 0 :(得分:1)
在MySQL中,可以在更新之前创建触发器。所以在这种情况下我建议使用:
delimiter //
CREATE TRIGGER upd_check BEFORE UPDATE ON table
FOR EACH ROW
BEGIN
IF NEW.xxx IS NOT NULL THEN
SET NEW.xxx = 0;
END IF;
END;//
delimiter ;
创建触发器后,您可以在没有WHERE的情况下运行加载数据infile。 我不确定你的具体要求是什么,但是在BEGIN和END中进行。
答案 1 :(得分:0)
您还可以创建一个临时表,将CSV文件中的数据插入到临时表中,然后最终使用所需的操作和过滤将数据插入目标表。
CREATE TEMPORARY TABLE staging LIKE tld_tod;
LOAD DATA INFILE 'E:/xxx.csv'
INTO TABLE staging
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\r\n';
INSERT INTO tld_tod
SELECT STR_TO_DATE(col_date, '%d-%b-%y') AS date
WHERE col_date IS NOT NULL;