2012-05-15 39 views
0

我需要加載一個製表符分隔文件到MySQL數據庫。我的數據庫設置了列:ID; A; B; C; D; E和我的文件是一個列ID和D的轉儲。我怎樣才能加載這個文件到我的分貝,並只替換列ID和D,出改變列C和E的值。當我現在加載時,列C和E被改爲DEFAULT:NULL。加載文件到mysql

+0

你現在正在加載嗎? –

+0

即時通訊使用Sequel Pro – Yogzzz

+0

我並不熟悉這一點。如果您使用的是直接SQL以外的東西,請在您的問題主體中明確說明(併爲您的問題添加適當的標籤)。我給出了直接MySQL的答案。 –

回答

2

我已經回答了類似這樣的問題here,但在你的情況下,你想要將csv加載到一個臨時表中,然後使用一個簡單的更新SQL語句將特定的語句從臨時表更新到你的生產表。

+0

不是Ben Lees的回答是行不通的,但是用LOAD IN FILE會更快,而且一般都是用SQL完成的 – GDP

+0

我在db中創建了一個新表,然後將我的文件上傳到該表,然後進行了連接與ID和更新D – Yogzzz

+0

然後,應該已經工作,具體取決於您使用該JOIN在UPDATE語句中指定的內容。那個SQL語句是什麼? – GDP

0

可以使用該命令更新特定柱:

UPDATE the_table 
SET D=<value-of-D> 
WHERE ID=<value-of-ID> 

然後在製表符分隔的文件中的每一行運行此命令,爲每個替換d和ID值。

0

您可以使用存儲過程或PHP程序來做必要的事情。

對於MySQL,SP需要使用load_file()打開文件並將該值存儲在變量中。然後程序需要通過找到代表新行的「\ n」來遍歷字符串中的整行。

然後該程序需要找到第一個標籤位置使用locate()並通過使用substring()獲得第一個ID col。然後,程序需要使用locate()及其第三個參數來查找第四個選項卡,即另外3個選項卡。這將成爲你D列的開始位置。然後使用locate()及其第三個參數再次找到下一個製表符,這將給出D列的結束字符。使用substring()獲取D列的內容。使用更新命令在where子句中使用ID作爲搜索關鍵字來更新行的D列。

由於上述內容將遍歷所有行,因此您將更新所有數據行。