mysql中duplicate key update

9 篇文章 0 订阅

二、duplicate key update

duplicate key update (重复密钥更新)

插入字段时如何自我判断是更新还是插入

2.1基础用法

2.1.1 假设此时我们表中没有数据

执行语句

INSERT INTO test ( id, NAME )
VALUES
	( '1', '晓明' ) 
ON DUPLICATE KEY UPDATE
id='123',
name='xiaoming'

结果

请添加图片描述

2.1.2 有数据后再次执行

执行语句

同上

sql结果

请添加图片描述

这里就是关键:我们可以看到变动为2,此时就是说明原数据进行了更新,更新内容为下面设置的字段值

结果

请添加图片描述

Q:我们再次执行一次这个语句,结果是什么样子呢?

A:自然是判断出该表中无此数据,新增一条额外的新数据

sql结果

请添加图片描述

结果

请添加图片描述

小结

到这里大家肯定明白了,其实就是会自动检测是否存在,如果存在values后面的值就会自动更改,不存在则插入

2.3 拓展用法,批量插入

执行语句

INSERT INTO test(`id`,`name`,`address`)
VALUES('4','修改10','北京'),
	( '1', '晓明' ,1) 
ON DUPLICATE KEY UPDATE
name=VALUES(name),address=VALUES(address);

结果

请添加图片描述

批量自动判断是否存在,存在则自动修改

2.4 Mybatis中的写法

单独插入

<insert id="insertUser" parameterType="com.test.User">
    INSERT INTO user(
    id,
    name,
    gender,
    birthday,
    address)
    VALUES
    (#{id},
    #{name},
    #{gender},
    #{birthday},
    #{address})
    ON DUPLICATE KEY UPDATE
    id = VALUES(id),
    name = VALUES(name),
    gender = VALUES(gender)
    birthday = VALUES(birthday),
    address = VALUES(address)
</insert>

批量插入

<insert id="insertUser" parameterType="java.util.List">
    INSERT INTO user(
    id,
    name,
    gender,
    birthday,
    address)
    VALUES
    <foreach collection="list" item="item" index="index" separator=",">
        (#{item.id},
        #{item.name},
        #{item.gender},
        #{item.birthday},
        #{item.address})
    </foreach>
    ON DUPLICATE KEY UPDATE
    id = VALUES(id),
    name = VALUES(name),
    gender = VALUES(gender)
    birthday = VALUES(birthday),
    address = VALUES(address)
</insert>
  • 7
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值