我的代码类似于以下内容:
$sql2 = "ALTER TABLE table ADD UNIQUE(field2, feild3, field4, field5);";
$sql2 .= "INSERT IGNORE INTO table (field1, field2, feild3, field4, field5) VALUES ('$_POST[field1]','$_POST[field2]','$_POST[field3]','$_POST[field4]','$_POST[field5]')";
if (!mysql_query($sql2,$con))
{
die('Error: ' . mysql_error());
}
echo "1 record added";
}
我发现如果表已经有两行相同但是效果不错,我会收到错误。我担心如果我从两个不同的源添加重复项,它们将被添加到表中,之后的请求将触发我之前得到的错误,因为两个几乎相同的行。如果从两个不同的源同时执行php文件,是否可以添加两个几乎相同的行,如上所示?
编辑:仅供参考该代码是来自较大程序的代码段。我正在从我正在处理的Android应用程序发送数据到$ _POST字段
答案 0 :(得分:3)
mysql_query不允许在单个调用中执行两个查询
当发现重复时,插入忽略不会返回错误(这就是为什么它被命名为忽略)
因此,FIRST错误是由alter ...; insert ...
然后alter table只需要执行一次,
在下次执行时,您不再需要再次执行alter table
否则,您将收到重复的INDEX错误(尝试添加现有索引)
对于唯一索引,是为了防止重复,
所以,它只会有一个独特的记录(无论如何)
对于你有趣的几乎相同的,
它永远不会发生
在字段2..5
上找到重复时,它被阻止了答案 1 :(得分:2)
表DDL是什么样的?控制重复项的方法是使用表上的键,允许/禁止基于该键结构的记录。在SQL中没有“几乎相同”的东西,它们既可以是重复的,也可以是唯一的。
使用Db和更新时,应始终在DDL中构建更新/删除/修改约束。因此,尝试修改数据库的过程无关紧要。数据库将使用表锁等来管理更新。并将根据您的约束管理表的更新。
如果您有更多问题或者这没有帮助,请将表格DDL发布给您。
答案 2 :(得分:0)
没有“几乎相同的行”之类的东西。行是相同或不相同。如果您指的是UNIQUE标准,那么根据指定的标准,行再次是唯一的。
在执行INSERT命令时,如果同一PHP脚本或其他PHP脚本已存在UNIQUE约束,并且正在插入的行违反UNIQUE约束,则第二个查询将被拒绝,即使在第一次查询后,它只是几分之一秒。如果它们不相同,无论谁询问查询或涉及多少页面,它都会通过。