我需要根据某些条件使用加载数据 infile 更新表中的现有行,这可能吗?
在文件'E:/xxx.csv'中加载数据 进入表 tld_tod @aaa,@xxx_date,@ccc 以“,”结尾的字段 以“\r\n”结尾的行 设置 xxx = str_to_date(@xxx_date, '%d-%b-%y') 其中 xxx 不为空且 aaa=@aaa
我需要根据某些条件使用加载数据 infile 更新表中的现有行,这可能吗?
在文件'E:/xxx.csv'中加载数据 进入表 tld_tod @aaa,@xxx_date,@ccc 以“,”结尾的字段 以“\r\n”结尾的行 设置 xxx = str_to_date(@xxx_date, '%d-%b-%y') 其中 xxx 不为空且 aaa=@aaa
您还可以创建一个临时表,将 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;
在 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 中执行。