2011-04-08 62 views
0

我有一個看起來像這樣的XML文件:與MySQL表合併XML文件

<?xml version="1.0"?> 
<results> 
    <row id="100"><name>name blah</name></row> 
    <row id="200"><name>name blah blah</name></row> 
    <row id="300"><name>name blah blah blah</name></row> 
</results> 

...和一個簡單的MySQL表:

CREATE TABLE `names` (
    `id` bigint(20) NOT NULL, 
    `name` varchar(100) NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

我想合併這兩個東西在一種使用XML文件中的不存在行更新我的表的方法。

什麼是最簡單的,無痛儘可能的方式來做到這一點考慮XML文件和MySQL表包含超過10萬行的,我想先運行此更新一次,一個星期左右...

非常感謝!

回答

2

LOAD XML聲明+其REPLACE子句在MySQL 5.5

代碼示例 -

LOAD XML LOCAL INFILE 'names.xml' 
REPLACE 
INTO TABLE names 
ROWS IDENTIFIED BY '<row>'; 

另一種方式 - Data Import tool(選擇XML格式,並追加/更新模式)

+0

有趣和快速的解決方案!謝謝!然而,我不確定我是否能夠在我的服務器上使用--xml選項啓動mysql :(現在嘗試其他解決方案... – errata 2011-04-08 09:53:23

+0

您不應該使用--xml選項啓動mysql!LOAD XML是一個聲明,支持MySQL 5.5,只是使用它,我沒有做任何問題 – Devart 2011-04-08 09:57:38

+0

呃......我的提供者仍然在MySQL v5.0上: - /我懷疑它會很快升級......我會看到什麼是可能的,這個解決方案似乎是最快的一個......我想讓這個腳本超級自動化,忘掉它在我的餘生中大聲笑 – errata 2011-04-08 10:12:10

1

自v5.1起,Mysql有一些XML support。儘管xml格式不同,但它仍然是一個開始的地方。

說實話,迭代通過該XML文件和做INSERT ... ON DUPLICATE IT UPATEREPLACE,開銷不是那麼巨大。解析和更新數據庫應該不到一個小時。

+0

「不到一個小時」? =)嗯,將嘗試測試它肯定,謝謝你的回覆! – errata 2011-04-08 09:53:50

+0

給我你總做的時間,我很好奇,看看我有多遠:D – Khez 2011-04-08 09:56:04

+0

好吧,當然會! =)我也很好奇=) – errata 2011-04-08 10:09:39

1

如果你不能使用load xml語句你可以使用powershell來將你的xml文件轉換成csv。

$destTXT = "c:\file.txt" 
[xml]$xml = (gc c:\file.xml) 
$xml.results.row | 
select @{ L = 'ID';  E = { $_.id} }, 
     @{ L = 'Name'; E = { $_.name } } | export-csv $destTXT -NoTypeInformation 
(gc $destTXT) -replace('"','') | Out-File $destTXT -Force 

你的txt文件將成爲本次

ID,Name 
100,name blah 
200,name blah blah 
300,name blah blah blah 

,你將能夠使用LOAD DATA語句。