MySQL中的ON DUPLICATE KEY UPDATE(插入更新)用法

业务场景

在设计数据库表时,通常会为某些列加PRIMARY KEY(主键约束)UNIQUE KEY(唯一约束),

再插入数据的时候,如果表中存在相同的唯一约束列,就更新该条记录,否则就插入新的记录。

示例

1.创建数据库,插入测试数据

CREATE TABLE `t_product_amount` (
  `id` INT(10) NOT NULL,
  `amount` INT(10) NOT NULL COMMENT '库存',
  `product_id` INT(10) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_product_amount_product_id` (`product_id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8mb4;

INSERT INTO t_product_amount VALUES(1,5,1);

INSERT INTO t_product_amount VALUES(2,5,2);

INSERT INTO t_product_amount VALUES(3,5,3);

   

2.测试ON DUPLICATE KEY UPDATE的使用

   执行脚本:

INSERT INTO t_product_amount VALUES(4,5,3) ON DUPLICATE KEY UPDATE amount = amount + 5;

   结果:

   

  测试发现数据并没有插入,而是根据唯一约束的列将以有的数据更新

  使用注意事项:

  1.如果行作为新记录被插入,则受影响行的值为1;如果原有的记录被更新,则受影响行的值为2。

  2.如果id,product_id与多个行向匹配,则只有一行被更新。应该尽量避免对带有多个唯一约束的表

    使用ON DUPLICATE KEY子句,执行如下脚本

INSERT INTO t_product_amount VALUES(2,5,3) ON DUPLICATE KEY UPDATE amount = amount + 5;

   执行结果

   

  3.ON DUPLICATE KEY UPDATE 特别适用于多行插入,可以在UPDATE子句中使用VALUES(col_name)函数

  从INSERT...UPDATE 语句的INSERT部分引用列值。

  如果没有发生重复关键字冲突,则UPDATE子句中的VALUES(col_name)可以引用被插入的col_name的值。

  本函数特别适用于多行插入。VALUES()函数只在INSERT...UPDATE语句中有意义,其它时候会返回NULL。

  示例:

INSERT INTO t_product_amount (id,amount,product_id) VALUES (4,2,5),(5,5,6) 
ON DUPLICATE KEY UPDATE amount=amount+VALUES(amount);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值