2017-07-24 23 views
0

這裏是score_table的樣子。SQL- LOAD DATA INFILE + REPLACE不起作用(第1行不包含所有列的數據)

Number | Name | Score | Parent 
  1. 主鍵是編號+姓名(複合鍵)。
  2. 導入.csv文件。
  3. Name列由網頁控制器設置。
  4. 在表中已經存在的數據:

Number | Name | Score | Parent 1 MJ 85 Micheal 2 Katie 60 Jay

現在我想用load data infilereplace將數據修改成表。
(.CSV是1 MJ 100 Micheal
(這意味着代替MJ的得分與100)

SO我寫的SQL作爲初級講座:

LOAD DATA INFILE scores.csv 
REPLACE INTO TABLE score_table 
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"' 
LINES TERMINATED BY '\n' 
(Number,Score,Parent) 
SET Name = #{name} 

但談到錯誤:
第1行沒有按」 t包含所有列的數據

如何解決這個問題?謝謝!

PS:
也許應該讓你知道,
我嘗試沒有REPLACE編寫SQL語句(其它都一樣)
它的工作(沒有編譯錯誤),但無法將比分從85更改爲100。

+0

「行1不包含所有列的數據」表明存在數據問題,您正在嘗試加載,您不覺得嗎?向我們展示一些示例數據,包括第一行。 – fancyPants

+0

我認爲這不是數據的問題,因爲我刪除了REPLACE並且它工作了(只是沒有替換) –

回答

0

嘗試:

文件:/path/to/file/scores.csv

1,MJ,100,Micheal 

MySQL命令行:

mysql> SELECT VERSION(); 
+-----------+ 
| VERSION() | 
+-----------+ 
| 5.7.19 | 
+-----------+ 
1 row in set (0.00 sec) 

mysql> DROP TABLE IF EXISTS `score_table`; 
Query OK, 0 rows affected (0.01 sec) 

mysql> CREATE TABLE IF NOT EXISTS `score_table` (
    -> `Number` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, 
    -> `Name` VARCHAR(255) NOT NULL, 
    -> `Score` INT UNSIGNED NOT NULL, 
    -> `Parent` VARCHAR(255) NOT NULL, 
    -> PRIMARY KEY (`Number`, `Name`) 
    ->); 
Query OK, 0 rows affected (0.00 sec) 

mysql> INSERT INTO `score_table` 
    -> (`Name`, `Score`, `Parent`) 
    -> VALUES 
    -> ('MJ', 85, 'Micheal'), 
    -> ('Katie', 60, 'Jay'); 
Query OK, 2 rows affected (0.00 sec) 
Records: 2 Duplicates: 0 Warnings: 0 

mysql> SELECT 
    -> `Number`, 
    -> `Name`, 
    -> `Score`, 
    -> `Parent` 
    -> FROM 
    -> `score_table`; 
+--------+-------+-------+---------+ 
| Number | Name | Score | Parent | 
+--------+-------+-------+---------+ 
|  1 | MJ | 85 | Micheal | 
|  2 | Katie | 60 | Jay  | 
+--------+-------+-------+---------+ 
2 rows in set (0.00 sec) 

mysql> LOAD DATA INFILE '/path/to/file/scores.csv' 
    -> REPLACE INTO TABLE `score_table` 
    -> FIELDS TERMINATED BY ',' ENCLOSED BY '"' 
    -> LINES TERMINATED BY '\n' 
    -> (`Number`, @`Name`, `Score`, `Parent`) 
    -> SET `Name` = @`Name`; 
Query OK, 2 rows affected (0.00 sec) 
Records: 1 Deleted: 1 Skipped: 0 Warnings: 0 

mysql> SELECT 
    -> `Number`, 
    -> `Name`, 
    -> `Score`, 
    -> `Parent` 
    -> FROM 
    -> `score_table`; 
+--------+-------+-------+---------+ 
| Number | Name | Score | Parent | 
+--------+-------+-------+---------+ 
|  1 | MJ | 100 | Micheal | 
|  2 | Katie | 60 | Jay  | 
+--------+-------+-------+---------+ 
2 rows in set (0.00 sec)