首页 > 数据库技术 > 详细

MySQL的ON DUPLICATE KEY UPDATE用法

时间:2020-03-28 15:45:42      阅读:55      评论:0      收藏:0      [点我收藏+]

平时我们在设计数据库表的时候总会设计 unique  或者 给表加上 primary key 的限制条件.

此时 插入数据的时候 ,经常会有这样的情况:

我们想向数据库插入一条记录:

若数据表中存在以相同主键的记录,我们就更新该条记录。

否则就插入一条新的记录。

逻辑上我们需要怎么写:

$result = mysql_query(‘select * from xxx where id = 1‘);
$row = mysql_fetch_assoc($result);
if($row){
mysql_query(‘update ...‘);
}else{
mysql_query(‘insert ...‘);
}

但是这样写有两个问题

1、效率太差,每次执行都要执行2个sql
2、高并发的情况下数据会出问题,不能保证原子性 

 

还好MySQL 为我们解决了这个问题:我们可以通过 ON DUPLICATE KEY UPDATE  达到以上目的, 且能保证操作的原子性和数据的完整性

ON DUPLICATE KEY UPDATE 可以达到以下目的:

向数据库中插入一条记录:

若该数据的主键值/ UNIQUE KEY 已经在表中存在,则执行更新操作, 即UPDATE 后面的操作。否则插入一条新的记录。

示例:

drop table t1;
create table t1(
    id int not null auto_increment,
    name varchar(10) unique,
    count int default 0,
    primary key(id),
    index(name)
)engine=innodb;

insert into t1(id, name) values(1, "shenjian");

insert into t1(id, name) values (111, "111"),(NULL, "abc"),(222, "222"),(NULL,"xyz");

insert into t1(name)values("shenjian"),("aaa"),("bbb") on duplicate key update count=100;

select * from t1;

执行结果:

技术分享图片

使用一条语句实现了这个功能,保证操作的原子性;

 

MySQL的ON DUPLICATE KEY UPDATE用法

原文:https://www.cnblogs.com/yunianzeng/p/12587420.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!