如果我的数据库包含以前的记录,在将新记录从我的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...
该表现在已针对快速搜索进行了优化。