mysql解决插入根据某条件判断是否插入

exists :如果子查询查询到了列那么就为真。

not exists : 如果子查询查询不到结果则返回值为真。

如果配合 insertinto、select、update、delete的where 条件使用,就能根据某些条件,先判断条件是否满足在做相应的操作。

示例:

用户做报警插入时,需要要传入一个报警周期时间filterTime,在这个周期内不存在同样的一条记录才做新增,否则不需要新增,避免频繁报警。

INSERT INTO work_alarm_record(create_time, alarm_time, alarm_state,alarm_content,foreign_name,foreign_id,device_id,var_id)
 SELECT NOW(),#{insertDO.alarmTime},#{insertDO.alarmState}, #{insertDO.alarmContent},#{insertDO.foreignName},#{insertDO.foreignId},#{insertDO.deviceId},#{insertDO.varId}
FROM dual
        WHERE not exists (
                 SELECT id FROM work_alarm_record WHERE (alarm_state  = 4 or alarm_state  = 2)and var_id = #{insertDO.varId} and alarm_time > #{filterTime} ORDER
                BY alarm_time desc limit 1
    );

DUAL表

 MySQL中的DUAL表是一个虚拟表,用于返回一个行。DUAL表只包含一列和一行数据

* 做条件判断是需要借助DUAL表才能完成。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值