mysql - 有条件地忽略行加载数据mysql

标签 mysql sql if-statement load-data-infile

我正在将大型数据集(60 gig)加载到数据库中。有些记录可以跳过,因为它们包含缺失的值。我如何告诉 MySQL 跳过包含某些(在本例中缺失)值的行?例如,我的文件看起来像这样

Value1, Value2
1,2
3,4
,5
9,10

第三行可以跳过不加载。我知道我可以加载所有内容然后删除它,但是处理 60 gig 文件需要很长时间,所以我想节省计算能力。

谢谢

最佳答案

如果“Value1”是一个唯一字段,那么您可以使用 IGNORE 选项。例如:

CREATE TABLE table1(
  Value1 INT(11) NOT NULL,
  Value2 INT(11) DEFAULT NULL,
  PRIMARY KEY (Value1)
);

LOAD DATA INFILE 'file.txt' 
  IGNORE -- forces to ingore existed records
  INTO TABLE table1
  FIELDS TERMINATED BY ','
  LINES TERMINATED BY '\r\n'
  IGNORE 1 lines
  (@var1, Value2)
  SET Value1 = IF(@var1 = 0, 1, @var1)

'IF(@var1 = 0, 1, @var1)' 帮助我们将缺失值 '0' 更改为 EXISTED KEY VALUE '1',这些记录将被忽略。

关于mysql - 有条件地忽略行加载数据mysql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9460389/

相关文章:

list - 有人可以用我的 Haskell 代码诊断问题吗?

php - Android - 值未通过 php 存储到 MySQL 数据库中

mysql - 内连接查询不起作用

javascript - 我需要带有浮点图插件值的 JSON 格式

mysql - INSERT INTO WITH SELECT 导致插入多行而不是仅插入一行

Swift 2.0 条件赋值和语法

functional-programming - OCaml:模式匹配与 If/else 语句

python - MySQL from_unixtime() 和 Python time.ctime() 不一致

sql - 如何从表中获取最后一个插入ID

mysql - 如果我有一个没有数据的 VARCHAR(32),它会占用空间吗?