mysql加载数据infile where子句
Posted
技术标签:
【中文标题】mysql加载数据infile where子句【英文标题】:mysql load data infile where clause 【发布时间】:2011-03-18 19:58:53 【问题描述】:我需要根据某些条件使用加载数据 infile 更新表中的现有行,这可能吗?
加载数据文件'E:/xxx.csv' 进入表 tld_tod @aaa,@xxx_date,@ccc 以“,”结尾的字段 以“\r\n”结尾的行 设置 xxx = str_to_date(@xxx_date, '%d-%b-%y') 其中 xxx 不为空且 aaa=@aaa【问题讨论】:
分两步完成:首先将数据加载到临时表中,然后在UPDATE ... JOIN
查询中使用它来更新您的目标表。
【参考方案1】:
您还可以创建一个临时表,将 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;
【讨论】:
【参考方案2】:在 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 中执行。
【讨论】:
以上是关于mysql加载数据infile where子句的主要内容,如果未能解决你的问题,请参考以下文章