我无法在任何地方找到答案。我有一个包含列的表: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
?
我把头发撕掉了!!!我唯一能找到的就是完全空行。提前谢谢!答案 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
的字符串处理