INSERT ON DUPLICATE KEY UPDATE IF语句带条件更新插入
本文地址:https://www.cnblogs.com/muphy/p/16291503.html
使用说明
- 数据库不存在主键则直接插入,否则更新
- 使用ON DUPLICATE KEY UPDATE必须要有唯一主键/约束
- 对应的语句还有replace into但是效率不高
- 取值说明,如“col_name=col_name_1 + values(col_name)”,表示:col_name列的值=数据库中col_name_1列的值+当前插入col_name列的值
- if语句,如“col_name=if(condition, true_value, else_value)”,表示condition条件成立时,取true_value值来更新,否则取else_value值来更新
- 组合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
id=(id),dept_id=if(dept_id = 'd1', CONCAT(dept_id,'-',values(dept_id)), values(dept_id)),
user_id=if(values(user_id) = 'u1-1', user_id, values(user_id)),
sort=(sort),
count=count + 1,
remark=values(remark)

mysql中批量更新使用请看下一篇介绍
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix