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子句的主要内容,如果未能解决你的问题,请参考以下文章

mysql 5.1.73 加载数据本地infile错误

MySQL加载数据infile - 加速?

MySQL 加载数据本地 Infile - 路径作为用户变量

在 spark 数据框中使用 where 子句加载数据

使用 WHERE 子句选择的数据加载 JCombobox

使用html表单导入csv数据...使用PHP脚本加载数据infile和MySQL