mysql 对于数据已经存在的,则更新。否则新增 duplicate的使用

mysql 对于数据已经存在的,则更新。否则新增 duplicate的使用

业务场景

对于数据已经存在的,则更新;否则新增。通过主键或唯一索引来判断
当前有一个仪器录入的功能,每天可以多次录入,但是一个仪器一天只有一条最终记录。
创建一个信息表(设置仪器编号和时间为主键)
还有另一个场景 对于主键已经存在的,则删除重复的那行数据,然后在插入一行;id会变。
此时用replace into
不同之处:
一、REPLACE 步骤是删除旧数据,插入新数据,之前的递增自动编号不存在,会AUTO_INCREMENT一个新的自动编号,因此会刷新索引。
二、DUPLICATE 不会改变旧的递增自动编号,同样会保持旧的索引不变。
==此篇使用DUPLICATE ==

CREATE TABLE `device_info` (
  `ID` varchar(36) NOT NULL COMMENT '唯一标示',
  `DEVCODE` varchar(50) NOT NULL COMMENT '仪器编号',
  `DEVNAME` varchar(100) NOT NULL COMMENT '仪器名称',
  `DEVTYPE` varchar(50) NOT NULL COMMENT '仪器类型',,
  `FACTORY` varchar(100) DEFAULT NULL COMMENT '代理厂商',
  `ADDRESS` varchar(150) DEFAULT NULL COMMENT '地址',
  `CONTPHONE` varchar(20) DEFAULT NULL COMMENT '联系电话',
  `DATEDATE` datetime NOT NULL,
  PRIMARY KEY (`DEVCODE`,`DATEDATE`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='仪器信息表';

使用duplicate

注意主键是用来判断的,所以不在duplicate key update后面更新

 INSERT INTO device_info(
        ID,
        DEVCODE,
        DEVNAME,
        DEVTYPE,
        FACTORY,
        ADDRESS,
        CONTPHONE,
        DATEDATE
        )
        VALUES
            (#{deviceInfo.ID},#{deviceInfo.DEVCODE},
            #{deviceInfo.DEVNAME},#{deviceInfo.DEVTYPE},
           #{deviceInfo.FACTORY},#{deviceInfo.ADDRESS},
           #{deviceInfo.CONTPHONE}, #{deviceInfo.DATEDATE})
        on duplicate key update  ID=values(ID), DEVNAME=values(DEVNAME),
         DEVTYPE=values(DEVTYPE),FACTORY=values(FACTORY), ADDRESS=values(ADDRESS),
         CONTPHONE=values(CONTPHONE), DATEDATE=values(DATEDATE);
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值