当右侧列中的某些值为空时,MySQL表被破坏

时间:2016-02-02 20:17:16

标签: mysql

我是SQL新手并将其用于工作中。

我有下表:

CREATE TABLE PC_Contacts
(
POC VARCHAR(255) PRIMARY KEY NOT NULL,
Phone_1 VARCHAR(255),
Phone_2 VARCHAR(255)
);

我使用powershell中的以下命令将CSV中的一些数据导入到表中: cmd / c'mysql -u root -p network< CSVImport.sql”。这是CSVImport文件中包含的内容:

USE Network
LOAD DATA INFILE 'C:\\ProgramData\\MySQL\\MySQL Server 5.7\\Uploads\\PC_Contacts.csv'
INTO Table PC_Contacts
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS;

填充表后,我注意到的是当最后一列(Phone_2)没有填充电话号码时,而不是输入NULL值,它是空白的。此外,只要省略电话号码,POC列上的几个字符就会被删除。所以我将xxx-xxx-xxxx输入到列中,重新填充它,一切看起来都很干净。我怎么能这样做,所以我不必这样做,表只能用NULL值填充自己?

+------------------+--------------+--------------
| POC | Phone_1 | Phone_2
+------------------+--------------+--------------
|April Wilson| 123-456-7890 | xxx-xxx-xxxx
|Anton Watson | 234-567-8901| 567-890-1234
|Ashley Walker | 345-678-9012 | 456-789-0123

当然,名称和电话已被更改。如果我把xxx-xxx-xxxx拿出去,你会在POC栏中看到类似'lson'而不是全名。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

从这个answer找到的这段代码应该可以解决你的问题。我会检查每个值,如果不存在则分配''。

对我而言,似乎正在发生的事情是当PC_Contacts.csv中缺少某个值时,导入会变得混乱,这就是为什么你会从其他列中获取某些数据的原因。

USE Network
LOAD DATA INFILE 'C:\\ProgramData\\MySQL\\MySQL Server 5.7\\Uploads\\PC_Contacts.csv'
INTO Table PC_Contacts
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS
(@vone, @vtwo, @vthree, @vfour, @vfive)
SET
POC = nullif(@vone,''),
Phone_1 = nullif(@vtwo,''),
Phone_2 = nullif(@vthree,'')
;