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

我们可以使用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操作

 

 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值