mysql 当没有数据时更新 有数据时可根据条件更新

最近做一项目时,遇到一并发问题,需要将sql进行调整,当没有数据时更新 有数据时可根据条件更新,根据这个问题在网上搜索好久,最终经过各种坎坷终于搞出来了,记录下

INSERT INTO tbTest ( strEventType, lCustomerId, strTimeFlag, nCount )
VALUES
	( 1, 1, 1, 1 ) 
	ON DUPLICATE KEY UPDATE strEventType = 1,
	lCustomerId = 1,
	strTimeFlag = 1,
	nCount =
IF
	( nCount < 15, nCount + 1, nCount );

如上 当有数据时 根据条件更新 可以将条件通过 IF 判断加入

在网上还找到相关得一些规则及需要注意得地方,一并记录下

规则是这样的:如果你插入的记录导致一个UNIQUE索引或者primary key(主键)出现重复,那么就会认为该条记录存在,则执行update语句而不是insert语句,反之,则执行insert语句而不是更新语句。所以 ON DUPLICATE KEY UPDATE是不能写where条件的。

这里需要特别注意的是:如果行作为新记录被插入,则受影响行的值为1;如果原有的记录被更新,则受影响行的值为2,如果更新的数据和已有的数据一模一样,则受影响的行数是0,这意味着不会去更新,也就是说即使你有的时间戳是自动记录最后一次的更新时间,这个时间戳也不会变动。

如果只需要进行判断是否存在该记录 不存在即插入数据得操作得话 我们可以使用如下语法:

INSERT INTO tbTest ( strEventType, lCustomerId, strTimeFlag, nCount ) SELECT
1,
1,
1,
1 
FROM
DUAL 
WHERE
	NOT EXISTS ( SELECT strEventType, lCustomerId, strTimeFlag, nCount FROM tbTest WHERE strEventType = 1 AND lCustomerId = 1 AND strTimeFlag = 1 );

其中dual为临时表,我们可以根据mysql提供得函数 NOT EXISTS 对数据进行有条件得筛选,这样如果子查询语句 查询不到对应得数据,我们进行插入,如果可以查询到对应得数据我们不进行任何操作了就。

除此之外 我们也可以使用 REPLACE INTO 进行操作

REPLACE INTO tbTest 
SET strEventType = 1,
lCustomerId = 1,
strTimeFlag = 1,
nCount = 2;

该语句当表中存在该数据时进行更新,如果不存在进行插入,需要注意得是,执行该语句,如果记录已经存在会先将原记录删除,然后在插入新数据!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值