INSERT ON DUPLICATE KEY UPDATE IF语句带条件更新

INSERT ON DUPLICATE KEY UPDATE IF语句带条件更新插入

本文地址:https://www.cnblogs.com/muphy/p/16291503.html

使用说明

  1. 数据库不存在主键则直接插入,否则更新
  2. 使用ON DUPLICATE KEY UPDATE必须要有唯一主键/约束
  3. 对应的语句还有replace into但是效率不高
  4. 取值说明,如“col_name=col_name_1 + values(col_name)”,表示:col_name列的值=数据库中col_name_1列的值+当前插入col_name列的值
  5. if语句,如“col_name=if(condition, true_value, else_value)”,表示condition条件成立时,取true_value值来更新,否则取else_value值来更新
  6. 组合4、5可以完成大部分功能

准备数据

CREATE TABLE `test_1` (
  `id` int NOT NULL AUTO_INCREMENT COMMENT '主键',
  `dept_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '部门id',
  `user_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '用户id',
  `sort` int DEFAULT 0 COMMENT '排序',
  `count` int DEFAULT 0 COMMENT '次数',
  `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '备注',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=38 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='测试';

INSERT INTO test_1(`id`, `dept_id`, `user_id`,`sort`,`count`,`remark`) VALUES (1, 'd1', 'u1', 1, 0, 'b1');
INSERT INTO test_1(`id`, `dept_id`, `user_id`,`sort`,`count`,`remark`) VALUES (2, 'd2', 'u2', 2, 0, 'b1');

更新和插入

insert into test_1 (id,dept_id,user_id,`sort`,`count`,`remark`) 
values (1,'d1-1','u1-1',1,0,'b1-1'),(2,'d2-2','u2-2',2,0,'b2-2'),(3,'d2-3','u2-3',3,0,'b3-3')
ON DUPLICATE KEY UPDATE 
-- 原字段dept_id的值为'd1',就设置成当前需要插入dept_id的值和原字段dept_id的值拼接起来,否则使用当前插入值更新
id=(id),dept_id=if(dept_id = 'd1', CONCAT(dept_id,'-',values(dept_id)), values(dept_id)), 
-- 当前插入user_id的值为'u1-1'就不更新,否则使用当前插入值
user_id=if(values(user_id) = 'u1-1', user_id, values(user_id)),
-- 存在时不更新,和不写效果一样
sort=(sort),
-- 存在时将原来的值+1
count=count + 1,
-- 存在时使用插入值remark更新
remark=values(remark)

mysql中批量更新使用请看下一篇介绍

posted @   明月心~  阅读(1519)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示