我有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万行,我希望每周运行一次这样的更新,这是实现这一目标的最简单,最轻松的方法。
非常感谢!
答案 0 :(得分:2)
LOAD XML语句+ MySQL 5.5中的REPLACE子句
代码示例 -
LOAD XML LOCAL INFILE 'names.xml'
REPLACE
INTO TABLE names
ROWS IDENTIFIED BY '<row>';
另一种方式 - Data Import tool(选择XML格式和追加/更新模式)
答案 1 :(得分:1)
从v5.1起,Mysql有一些XML support。虽然xml格式不同,但它仍然是一个起点。
老实说,迭代该xml文件并执行INSERT ... ON DUPLICATE IT UPATE或REPLACE的开销并不大。解析和更新数据库应该不到一个小时。
答案 2 :(得分: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
您将能够使用加载数据语句。