mysql数据存在则更新,不存在则插入新数据解决办法

日常问题 专栏收录该内容
7 篇文章 0 订阅

我们可以使用ON DUPLICATE KEY UPDATE 这个语法(mysql特有)

INSERT INTO 表名 (

   字段1,字段2,字段3

)

VALUES

   (value1, value2,value3)

ON DUPLICATE KEY UPDATE

   字段1=values(字段1) ;

如果要更新部分是固定值则是

   字段1 = “xxxx”;

 

 

 ON DUPLICATE KEY UPDATE的作用,当insert已经存在的记录时,执行Update

执行更新操作的条件是主键或者唯一索引找到要插入的数据,这样说可能有点难理解,我们来举个栗子

下面一张表person,id是唯一主键

 

INSERT INTO person (
    id,
    name,
    age,
    gender,
    createTime,
    modifyTime,
    address
)
VALUES
    (
        1,
        '张三',
        10,
        1,
        now(),
        NULL,
        '四川'
    ) ON DUPLICATE KEY UPDATE modifyTime = now();

则通过id=1去查找数据,因为id=1不存在则插入

再次执行,因为已经存在了,所以会进行更新操作

ON DUPLICATE KEY UPDATE 后面的是更新语句

如果是固定值则使用

字段名 = "xxxx"

如果是动态值则使用

字段名 = values (xxxx)

(xxx)必须是insert中包含的字段 ,

例子

INSERT INTO person (
    name,
    age,
    gender,
    createTime,
    modifyTime,
    address
)
VALUES
    (
        '张三',
        10,
        1,
        now(),
        NULL,
        '四川'
    ) ON DUPLICATE KEY UPDATE age= values(age); 

values(age)对应into中的对应字段名(大小写需要一致)

 

以下几种场景需要注意:

1.没有唯一主键或者唯一索引时,则永远不会进行更新操作。

2.子表多条数据有相同的数据,主键ID不作为更改依据时,需要建立唯一索引,我们建立name_address的唯一索引。

执行以下语句

INSERT INTO person (
    name,
    age,
    gender,
    createTime,
    modifyTime,
    address
)
VALUES
    (
        '张三',
        10,
        1,
        now(),
        NULL,
        '广东'
    ) ON DUPLICATE KEY UPDATE modifyTime = now();

 

 

则可以成功更新

3.当语句中存在唯一索引和唯一主键时,以唯一主键为查找条件

注意:如果xml设置了返回主键,则只会执行insert操作

 

 

  • 1
    点赞
  • 0
    评论
  • 1
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

luxray_m

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值