MySql:加载数据infile,忽略带有空变量的行

时间:2016-02-11 00:59:17

标签: php mysql

我无法在任何地方找到答案。我有一个包含列的表:VID,PhoneNo,Ext和EntryDate。

我尝试同时制作两个主键,但它一直允许输入带有空白电话号码的行。结果是,我结束了1000万行,只有100万个电话号码。当我加载我的文件时,我希望它只加载ID,PhoneNo WHERE PhonoNo IS NOT NULL。

这两个必须是主键,因为我不想拥有ID = 1的多行和PhoneNo =' 555-1212'。

我有:

     #EntryDate = '2016-02-10';
$sql = "LOAD DATA LOCAL INFILE '".$file."' IGNORE INTO TABLE PhoneNumbers
      (@VID, @AreaCode, @PhoneNo, @Ext, @Email)
    SET VID = @VID, PhoneNo = CONCAT(@AreaCode, @PhoneNo), Ext = @Ext, EntryDate='".$entryDate."'

我不能做像

这样的事情
 SET VID = @VID, PhoneNo = CONCAT(@AreaCode, @PhoneNo), 
Ext = @Ext, EntryDate='".$entryDate."'
WHERE @PhoneNo IS NOT NULL

我把头发撕掉了!!!我唯一能找到的就是完全空行。提前谢谢!

1 个答案:

答案 0 :(得分:0)

您无法在此问题here

中看到这种情况
  

没有。有一个IGNORE选项。但是它使用行号而不是内联逻辑比较。

您正在使用的IGNORE部分用于处理重复项,例如无法在此处放置子句的条件。

即使您将列类型设为NOT NULL,也会将默认值应用于该字段。

  

尝试将NULL加载到NOT NULL列会导致分配   列的数据类型的隐式默认值和警告,   或严格的SQL模式中的错误。讨论了隐式默认值   在第11.7节“数据类型默认值”。

请参阅MySQL Documentation LOAD DATA INFILE并引用

  

REPLACE和IGNORE关键字控制输入行的处理   复制唯一键值上的现有行:

修改

由于您尚未发布样本数据,因此既不会假设NULL值显示为空字符串或字符串"NULL"。如果是后者,请参阅DBA上的this question,了解如何将NULL作为带LOAD DATA INFILE的字符串处理