2012-05-21 59 views
8

我在數據庫中有一個表,並且想更新本地文件上已脫機的列。文件本身有兩列從本地文件更新MySQL表

  1. 其對應於在表中的ID列的ID,和
  2. 的實際值。

我已經能夠使用

LOAD DATA INFILE 'file.txt' INTO TABLE table 
    FIELDS TERMINATED BY ',' 

,創造新行,但我不知道我怎麼能專門以這樣的方式插入值,該文件中的ID列被加入到表中的ID列。有人可以幫助使用SQL語法嗎?

回答

9

我建議你將你的數據加載到臨時表中,然後使用INSERT ... SELECT ... ON DUPLICATE KEY UPDATE;例如:

CREATE TEMPORARY TABLE temptable (
    id INT UNSIGNED NOT NULL, 
    val INT, 
    PRIMARY KEY (id) 
) ENGINE = MEMORY; 

LOAD DATA LOCAL INFILE '/path/to/file.txt' INTO temptable FIELDS TERMINATED BY ','; 

INSERT INTO my_table 
SELECT id, val FROM temptable 
ON DUPLICATE KEY UPDATE val = VALUES(val); 

DROP TEMPORARY TABLE temptable; 
6

另一種方式可能是...

既然你已經知道了表名以及有ID和實際值...你可以做的是...直接寫UPDATE語句在一個文件中,像

update mytable set value_col = value where ID_col = ID; 

Second Update Statement 

Third Update statement 

....... 

將文件另存爲*.sql一樣,updatescript.sql然後直接執行該腳本像

mysql -h <hostname> -u root -p <your_db_name> < "E:/scripts/sql/updatescript.sql" 
0

它取決於行號, 如果它是在數百個腳本中創建更新列並運行它,但是如果它在大量導入該文件到一個新表中並使用連接更新您的表,然後丟掉表

+0

哦,eggyal已經發布了我在這裏說的話 – PandeyTheDBA