2011-04-08 61 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语句。