如果行不存在则先更新然后插入(SQL)而不是先检查行是否存在?

时间:2009-09-18 10:14:14

标签: php sql mysql

我总是使用检查表的方法来查看是否存在行,然后使用我的新数据更新它,或者如果它不存在则插入它,但它让我想到了简单的错误进行更新,如果没有行受到影响,那么执行一个insert语句,这可能会加速我的脚本并减少服务器上的负担。

有人预见到有任何问题吗?

4 个答案:

答案 0 :(得分:3)

REPLACE出了什么问题?

  

REPLACE的工作原理与INSERT完全相同,只是如果表中的旧行与PRIMARY KEY或UNIQUE索引的新行具有相同的值,则在插入新行之前删除旧行。

答案 1 :(得分:2)

如果通过“查看是否存在行”是指主键,您可能会对12.2.5.3. INSERT ... ON DUPLICATE KEY UPDATE Syntax感兴趣:

  

如果指定ON DUPLICATE KEY   UPDATE,并插入一行   会导致a中的重复值   UNIQUE索引或PRIMARY KEY,UPDATE   执行旧行。对于   例如,如果列a被声明为   UNIQUE并包含值1,the   以下两个陈述有   相同的效果:

INSERT INTO table (a,b,c) VALUES (1,2,3)
  ON DUPLICATE KEY UPDATE c=c+1;

UPDATE table SET c=c+1 WHERE a=1;

也许你可以用它?

与你所说的相比,tt正在做另外一种方式:试图插入,如果有DUPLICATE KEY错误,它会更新线......但它允许你不检查线是否先存在。

但是,它只适用于主键/唯一索引;没有任何where子句。

答案 2 :(得分:1)

REPLACE语句执行相同的操作,如果某行不存在则会插入它,如果存在则会更新它。

答案 3 :(得分:0)

INSERT IGNORE在这里也很有用。