当前位置:网站首页>MySQL的on duplicate key update 的使用
MySQL的on duplicate key update 的使用
2022-07-30 20:14:00 【iijik55】
mysql的存在就更新不存在就插入实现
先建数据库表,重点要添加主键索引(id列,没有测试)和唯一索引(branch_no列),随便找表测试
INSERT INTO t_name ( c1, c2, c3 )
VALUES
( 1, '1', '1')
ON DUPLICATE KEY UPDATE
c2 = '2';
测试:
1、organ_no, branch_no, branch_name, created_by字段都不相同
2、branch_name, created_by不同
3、唯一索引branch_no不同
4、修改的值包括了唯一索引值branch_no
现在数据库表内容

1、执行sql :organ_no, branch_no, branch_name, created_by字段都不相同
INSERT INTO t_bank_organ_copy1 ( organ_no, branch_no, branch_name, created_by )
VALUES
( 1, '3', '浙江分行', '3' )
ON DUPLICATE KEY UPDATE
branch_name = '江苏分行';

因为没有值相同,所以一定添加
2、branch_name, created_by与表中数据不同

INSERT INTO t_bank_organ_copy1 ( organ_no, branch_no, branch_name, created_by )
VALUES
( 1, '3', '海南分行', '4' )
ON DUPLICATE KEY UPDATE
branch_name = '江苏分行';

第三条数据从浙江分行改变成了江苏分行
ON DUPLICATE KEY UPDATE 后的值是要修改的值
而这个会根据唯一索引进行查询,其他普通列不做匹配(主键也是做匹配的)
可以通过下条验证
3、唯一索引branch_no不同

INSERT INTO t_bank_organ_copy1 ( organ_no, branch_no, branch_name, created_by )
VALUES
( 1, '4', '江苏分行', '3' )
ON DUPLICATE KEY UPDATE
branch_name = '海南分行';
除了唯一索引branch_no不同,其他列都相同

执行后数据库增加一条
4、修改的值包括了唯一索引值branch_no

下面对唯一索引进行修改尝试
INSERT INTO t_bank_organ_copy1 ( organ_no, branch_no, branch_name, created_by )
VALUES
( 1, '4', '江苏分行', '3' )
ON DUPLICATE KEY UPDATE
branch_name = '海南分行',
branch_no = '8';
修改branch_no 4为8,并修改branch_name为海南分行

可以看出对唯一索引和普通列都做了修改
总结:
1、mysql的存在就更新不存在就插入可由on duplicate key update语法实现;
2、不过只会检查添加列中有没有匹配到主键id和唯一索引的重复项;
3、如果有重复项会在on duplicate key update后进行修改指定的字段和内容;
4、所涉及的唯一索引也是可以修改的;
最后也可这样写:
原数据库表

INSERT INTO t_bank_organ_copy1 ( organ_no, branch_no, branch_name, created_by )
VALUES
( 1, '8', '河南分行', '3' )
ON DUPLICATE KEY UPDATE
branch_name = values(branch_name);

修改成了河南分行
先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦
边栏推荐
- WPS没有在任务栏显示所有窗口选项怎么回事?
- 化二次型为标准型
- MySQL kills 10 questions, how many questions can you stick to?
- MySQL数据库主从配置
- MySQL six-pulse sword, SQL customs clearance summary
- Different lower_case_table_names settings for server (‘1‘) and data dictionary (‘0‘) 解决方案
- Centos7 install mysql8
- HMS Core Discovery第16期回顾|与虎墩一起,玩转AI新“声”态
- .eslintrc.js for musicApp
- 【Codeforces思维题】20220728
猜你喜欢

MySQL database master-slave configuration

Different lower_case_table_names settings for server (‘1‘) and data dictionary (‘0‘) 解决方案

Cesium loads offline maps and offline terrain

网络安全实验环境搭建

CDH集群spark-shell执行过程分析

推荐系统:评估指标【离线评估指标:RMSE(均方根误差)、AUC、准确率、召回率、F1】【在线评估:A/B测试】【一般要求响应时间<0.5s】

青蛙跳台阶(递归和非递归)-------小乐乐走台阶

Linux下安装Mysql5.7,超详细完整教程,以及云mysql连接

推荐系统:实时性【特征实时性:客户端实时特征(秒级,实时)、流处理平台(分钟级,近实时)、分布式批处理平台(小时/天级,非实时)】【模型实时性:在线学习、增量更新、全量更新】

多线程的互斥锁应用RAII机制
随机推荐
Difference Between Concurrency and Parallelism
Install MySQL tutorial under Linux
Recommendation System - Sorting Layer - Model (1): Embedding + MLP (Multilayer Perceptron) Model [Deep Crossing Model: Classic Embedding + MLP Model Structure]
明解C语言第五章习题
【PM专用】快速统计团队还有谁没有登记上报信息,快速筛选出属于自己项目组的成员,未完成XXX工作事项的名单
Database indexes: indexes are not a panacea
[PM only] Quickly count who else in the team has not registered and reported information, and quickly screen out the members of their own project team who have not completed the list of XXX work items
MySQL夺命10问,你能坚持到第几问?
.eslintrc.js for musicApp
银行数据资产转换能力弱?思迈特软件助力解决银行困境
Maxwell 一款简单易上手的实时抓取Mysql数据的软件
Scala类中的属性
18.客户端会话技术Cookie
KEIL problem: [keil Error: failed to execute 'C:\Keil\ARM\ARMCC']
MySql密码
推荐系统:概述【架构:用户/物品特征工程---->召回层---->排序层---->测试/评估】【冷启动问题、实时性问题】
Typora设置标题自动标号
多线程获取官方汇率
DCM 中间件家族迎来新成员
ceph的部署练习