天天看点

mysql update主键冲突_mysql主键重复,不报错,只更新的操作

项目中对接一个单点登陆的回调api,需要判断用户是否在库,不在库新增用户,在库更新登陆次数,大概代码如下:<?php

$isExist = true;

if ($isExist)

{

insert([

'id' => 392223903,

'username' => 'gaojiufeng',

'password' => '123456',

'login' => 1, //登陆次数

]);

}

else

{

update([

'login' => '+1'

]);

}

上面的代码在高并发下会出现问题,主键会重复插入报错。于是我们使用MySQL ON DUPLICATE KEY UPDATE语句,不存在直接新增,存在就更新,代码如下:INSERT INTO member ( id, username, PASSWORD, login )

VALUES

( 392223903, 'gaojiufeng', '123456', 1 )

ON DUPLICATE KEY UPDATE login = login + 1;

其实在thinkphp自带了这种方案,但是使用的REPLACE INTO语句,REPLACE INTO语句发现主键重复会删除原来的数据,再次新增一条。虽然能够达到我的要求,但是我并不想更新全部字段,目前看来ON DUPLICATE KEY UPDATE语句性能更高。