20

我需要根据某些条件使用加载数据 infile 更新表中的现有行,这可能吗?

在文件'E:/xxx.csv'中加载数据
进入表 tld_tod
@aaa,@xxx_date,@ccc
以“,”结尾的字段
 以“\r\n”结尾的行
设置 xxx = str_to_date(@xxx_date, '%d-%b-%y')
其中 xxx 不为空且 aaa=@aaa

4

2 回答 2

3

您还可以创建一个临时表,将 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;
于 2018-03-23T19:31:43.733 回答
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 的情况下运行 load data infile。我不确定您的具体要求是什么,但在 BEGIN 和 END 中执行。

于 2018-02-20T22:07:40.880 回答