2012-08-29 52 views
0

我有一个表名为system_settings的表,其中有3列,即IDActual_Setting & Standards_Setting将数据从文本文件导入到MySQL中的特定列中

ID列有3行,即'Virtual Machine 1''Virtual Machine 2' & 'Virtual Machine 3'

我希望从文本文件导入数据到列'Actual_Setting'其中ID = 'Virtual Machine 1'

我已经使用这个查询尝试:

LOAD DATA LOCAL IN FILE 'C:/Program Files/MySQL/MySQL Server 5.5/bin/syspolicy.txt' 
INTO system_settings(Actual_Setting) 
WHERE ID LIKE 'Virtual Machine 1'; 

但它返回一个错误。

我使用MySQL Server 5.5,MySQL查询浏览器&是一台Windows 7 PC。

回答

0

LOAD DATA将始终将数据插入新的行,而不会更新现有行。

但是,如果发生密钥冲突,则可以通过使用其REPLACE关键字,先将删除现有行。如果有对IDUNIQUE键,你并不需要保存的Standards_Setting值,你可以利用此功能优势:

LOAD DATA LOCAL INFILE 'C:/Program Files/MySQL/MySQL Server 5.5/bin/syspolicy.txt' 
    REPLACE INTO TABLE system_settings 
    FIELDS TERMINATED BY '' ENCLOSED BY '' ESCAPED BY '' 
    LINES STARTING BY '' TERMINATED BY '' 
    (Actual_Setting) 
    SET ID = 'Virtual Machine 1' 

(注意,因为要读取整个文件转换成单场,你必须重写默认值,并明确规定,目前并无任何字段或行终止/报价/转义字符)。

否则,如果您需要更新现有记录,我建议您加载文件进入临时表格,然后用内容更新您的表格:

CREATE TEMPORARY TABLE foo (content LONGTEXT); 

LOAD DATA LOCAL INFILE 'C:/Program Files/MySQL/MySQL Server 5.5/bin/syspolicy.txt' 
    INTO TABLE foo 
    FIELDS TERMINATED BY '' ENCLOSED BY '' ESCAPED BY '' 
    LINES STARTING BY '' TERMINATED BY '' 
    (content); 

UPDATE system_settings 
    SET Actual_Setting = (SELECT content FROM foo) 
WHERE ID = 'Virtual Machine 1'; 

DROP TEMPORARY TABLE foo; 
+0

@LamakDaruwala:我注意到你不接受这个答案;它没有解决你的问题吗? – eggyal

相关问题