乌徒帮技术范儿技术中心SQL › sql插入数据时,如果已经存在,则执行update更新

sql插入数据时,如果已经存在,则执行update更新

分类:SQL

在很多项目中,我们需要对数据进行不断的调用和更新,如果有新的数据过来,还要把它加入到数据库中。其中非常重要的一种情况就是,我们不知道传过来的数据是不是原本数据库中就已经有了的记录,所以我们常常需要先通过抓取数据,判断是否存在,如果存在执行update,如果不存在执行insert,这样就要进行两次数据库操作,第一次是查询,第二次是更新或插入,有没有一种方法可以只需要执行一次操作即可呢?答案是有的。

INSERT ... ON DUPLICATE KEY UPDATE 方法可以帮助我们非常好的解决这一问题。让我们来看一个例子:

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

这一个语句就可以实现,在插入(1,2,3)这条记录的时候,检查是否存在a=1,如果有a=1的记录,那么更新a=1这条记录,相当于执行了一次下面这个语句:

UPDATE table SET b=b-1,c=c+1 WHERE a=1;

如果数据库中不存在a=1这条记录,那么就插入新的记录。

使用INSERT ... ON DUPLICATE KEY UPDATE的前提是,a字段被设置为“唯一键”索引,否则该方法是无效的。

更多例子参考这篇文章

还有一种方法是使用ignore,我们来看一个例子:

INSERT ignore INTO a(id, type)  VALUES  ( 11, 22)

这个语句中使用了ignore,意思是:如果数据库中存在一条记录id=11,那么就不执行insert操作(忽略),只有上述条件不满足时才执行插入操作。ignore方法也要求这里的id为唯一键(主键默认就是是唯一键,因此id可以是主键)

另外,还有一种方法是replace into,它的使用方法和insert into一样,但是和上面的ignore效果不同,如果数据库中已经存在id=11,那么强制替换id=11这条记录的type为22。

具体可以参考这篇文章

总结一下:

如果要实现插入数据时检查是否已经存在某个唯一键的数据,如果存在,则替换该记录的其他字段,我们可以使用三种方法来实现插入数据时判断是否存在对应键的记录,分别是INSERT ... ON DUPLICATE KEY UPDATEinsert gnore intoreplace into。其中INSERT ... ON DUPLICATE KEY UPDATEreplace into可以实现如果已经存在对应键的记录时,替换该记录的其他字段。

已有3条评论 快速评论
  1. 厦门微信营销 #5615楼 2015/01/16 17:16:28 回复

    来支持博主!

  2. 威客百科 #5608楼 2015/01/14 15:42:56 回复

    不断的调用么?

  3. Asiaidc.net #5597楼 2015/01/10 19:31:43 回复

    好东西,路过正好学习一下!

填写个人信息,赶快回复吧!