在通过php从xml文件插入记录之前查询mysql数据库


query mysql database before insertion of records from xml file via php

如果我的数据库包含以前的记录,在将新记录从我的xml文件(包含400条记录)插入数据库之前,我如何查询每个数据库行防止的重复插入每次加载或读取xml文件会议。下面是Php&mysql代码,只需读取并上传整个记录。

<?php
    $xml=simplexml_load_file("d:'salarydepartment
'salary.xml");
    $status=count($xml);
foreach ( $xml as $sal)
    {
    $name=$sal->name;
    $sex=$sal->sex;
    $state=$sal->state;
    $country=$sal->country;
    $result=mysql_query
("insert into salary
(name,sex,state,country ) values
($name,$sex,$state,$country)",$con)
    echo $status." "." Salary Records
successfully stored ! ";
    }
?>

更改表方案

添加唯一约束

这是您的插入查询:

INSERT INTO salary (name,sex,state,country) VALUES (?,?,?,?)

我假设您的表具有以下模式

salary (name, sex, state, country)

您不希望记录重复。因此,您必须有某种方法来检查记录是否已经插入,这意味着一列(或其组合)必须是唯一的。我的猜测是,您的xml文件在每个employee中不包含任何unique identifiers

然后,我们应该考虑在表中添加一个约束,以收集足够的信息,从而降低碰撞次数。

ALTER TABLE salary ADD UNIQUE KEY (name,sex,state,country)
//This sql statement is intended for MySQL version 5.1 please check your's

有了这一限制,唯一允许的重复是同一国家和州、同性别和同名的人。

添加主键

现在,这将不是一个好的解决方案,所以我在以下假设的基础上提出了一个更好的解决方案

  • 员工有一个唯一的ID,并且可以在xml中找到

好的,现在它很简单,但乏味的

  • 我们需要在表ALTER TABLE salary ADD COLUMN...中添加一列
  • 我们需要用每个员工的唯一ID填充所有元组
  • 我们最后添加了重要约束ALTER TABLE salary ADD PRIMARY KEY...

该表现在已针对快速搜索进行了优化。