如果表中没有确切的行,则只插入MySQL

时间:2011-05-01 02:12:12

标签: php mysql

我需要在表中插入它,但前提是没有该行的副本。 (两个值应该相等)。如何更改代码以这种方式工作?感谢

<?php
mysql_select_db("cyberworlddb", $con);
mysql_query("INSERT INTO Badges (UID, Website)
VALUES ('1', 'www.taringa.net')");
mysql_close($con)
?>

4 个答案:

答案 0 :(得分:1)

最简单的方法是使用INSERT IGNORE并在字段上使用唯一键。如果不存在行,它将插入,否则不执行任何操作。

答案 1 :(得分:1)

您可以为UID和Website列创建单个索引并使该索引唯一,然后使用INSERT IGNORE。结果是如果它是重复的,它将被忽略。

如果您需要能够判断SQL是否插入了一行,那么请调用mysql_affected_rows(),如果它没有执行任何操作则返回0,如果插入记录则返回1。

答案 2 :(得分:0)

(UID,网站)上的唯一索引怎么会导致插入失败?

答案 3 :(得分:0)

首先,关于这个问题。在RDBMS中检查“精确”行的副本是很简单的。这太昂贵了。要问的正确问题是什么使我的行独特,我可以逃脱的最小值是什么。对大柱子施加独特的约束是一个坏主意。

答案说你应该在唯一约束中包含UID再次只是 BAD 。 UID很可能是生成的密钥,来自外部的唯一输入是网站名称。所以这里唯一明智的做法是在网站专栏上加上一个独特的约束。

然后插入代码应该处理来自数据库的唯一约束错误。您可以从DB句柄中获取错误编号,例如

$ errorNo = $ mysql-&gt; errno; 然后检查对应于唯一密钥违规的特定代码(在MYSQL的情况下为1062)。