MYSQL:插入记录检查记录是否存在,存在则更新,不存在测插入记录SQL

我们在开发数据库相关的逻辑过程中, 经常检查表中是否已经存在这样的一条记录, 如果存在则更新或者不做操作, 如果没有存在记录,则需要插入一条新的记录。

这样的逻辑固然可以通过两条sql语句完成。

SELECT COUNT(*) FROM xxx WHERE ID=xxx;

if (x == 0)

    INSERT INTO xxx VALUES;

else

    UPDATE xxx SET ;

 

但是这样操作在性能上有所损失, 代码结构感觉有点丑陋。

官方文档如下:

MySQL provides many extentions to SQL which help performance in many common use scenarios. Among these are INSERT ... SELECTINSERT ... ON DUPLICATE KEY UPDATE, and REPLACE.

 

重要的就是上面提到的 :

INSERT ... SELECT

INSERT ... ON DUPLICATE KEY UPDATE

INSERT ... ON DUPLICATE REPLACE

 

比如想往表中插入一条数据,如果表中没有该条数据才插入,如果已经存在该条数据就不插入。

首先,在创建表时,将不需要重复的字段设置为unique,然后在插入时,使用insert ignore语句。

例如:(数据库用的是mysql5)
创建一张表用来存储用户:
create table user_info
(
   uid mediumint(10) unsigned NOT NULL auto_increment primary key,
   last_name char(20) not null,
   first_name char(20) not null,
   unique ( last_name, first_name)
);
alter table anser add UNIQUE (last_name,first_name)
插入数据:
insert ignore into user_info (last_name,first_name) values ('x','y');
这样一来,如果表中已经存在last_name='x'且first_name='y'的数据,就不会插入,如果没有就会插入一条新数据。

上面的是一种用法, 也可以用REPLACE 来实现。

其实MySQL提供了可以在一个SQL语句中完成上述逻辑的支持。

posted @ 2017-09-14 20:15  Richie`  阅读(510)  评论(0编辑  收藏  举报