MySQL - 可能将INSERT拆分为2个查询

时间:2012-10-29 19:43:05

标签: mysql insert

我有一个INSERT查询,如下所示:

$db->Query("INSERT INTO `surfed` (user, site) VALUES('".$data['id']."', '".$id."')");

基本上我想像上面的查询一样插入,但如果该网站已经被其他用户提交,我不希望它再将相同的$id重新提交到网站列。但是,多个用户可以查看同一个站点,并且所有用户都需要与他们查看的站点位于同一行,这会导致冲浪表具有数十万个插入,从而大大减慢了网站的速度。

是否有任何方法可能以某种方式拆分插入内容,以便如果某个网站已经提交,则不会再为其他用户提交该网站。也许有一种方法可以使用UPDATE以便没有插入过载?

谢谢,

3 个答案:

答案 0 :(得分:0)

我想最简单的方法是设置一个存储过程,执行SELECT以检查用户站点组合是否已经在表中。如果没有,则执行insert语句。如果该组合已经存在,那么您已完成并且不执行插入。

查看存储过程手册 http://dev.mysql.com/doc/refman/5.1/en/create-procedure.html

答案 1 :(得分:0)

如果您不需要知道是否确实插入了一行,则可以使用INSERT IGNORE ...

$db->Query("INSERT IGNORE INTO `surfed` (user, site) VALUES('".$data['id']."', '".$id."')");

但这假设您为列定义了唯一键。

IGNORE此处将忽略尝试添加相同唯一密钥两次触发的完整性约束违规错误。

关于INSERT语法的MySQL参考手册有关于http://dev.mysql.com/doc/refman/5.5/en/insert.html

的一些信息

答案 2 :(得分:0)

您需要设置一个条件语句,询问该ID是否已经存在,然后是否更新,否则插入