新闻中心
如何在mysql中使用INSERT ON DUPLICATE KEY UPDATE
答案:INSERT ON DUPLICATE KEY UPDATE 用于处理唯一键或主键冲突时执行更新操作。当插入数据存在冲突则更新指定字段,否则插入新记录,适用于存在则更新、不存在则插入的场景,如用户登录统计,需确保表上有唯一索引或主键,利用VALUES()获取插入值,可避免竞争条件并提升效率。

在 MySQL 中,INSERT ON DUPLICATE KEY UPDATE 是一种非常实用的语句,用于在插入数据时,如果遇到唯一键或主键冲突,就执行更新操作,而不是报错。这个功能特别适合处理“存在则更新,不存在则插入”的场景。
基本语法
该语句的基本结构如下:
INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...) ON DUPLICATE KEY UPDATE column1 = VALUES(column1), column2 = VALUES(column2), ...;说明:
- 当插入的数据导致唯一索引或主键冲突时,MySQL 会执行 UPDATE 部分。
- 如果没有冲突,则正常插入新记录。
- VALUES(column) 表示你尝试插入的值,不是当前表中的值。
使用场景示例
假设有一个用户登录统计表:
小爱开放平台
小米旗下小爱开放平台
291
查看详情
CREATE TABLE user_stats (
user_id INT PRIMARY KEY,
login_count INT DEFAULT 0,
last_login DATETIME
);
我们希望每次用户登录时:
- 如果 user_id 不存在,就插入一条新记录,login_count 为 1。
- 如果已存在,就将 login_count 加 1,并更新最后登录时间。
可以这样写:
INSERT INTO user_stats (user_id, login_count, last_login) VALUES (1001, 1, NOW()) ON DUPLICATE KEY UPDATE login_count = login_count + 1, last_login = NOW();第一次执行:插入 user_id=1001 的记录。
第二次执行:发现主键冲突,于是更新 login_count 和 last_login。
注意事项与技巧
- 必须有唯一索引(UNIQUE)或主键(PRIMARY KEY),否则不会触发“duplicate key”错误,也就不会执行 UPDATE。
- UPDATE 中可以引用 VALUES() 函数获取插入时的值,比如 VALUES(login_count) 返回的是你试图插入的那个值。
- 可以只更新部分字段,不需要更新所有列。
- 如果 UPDATE 后的值和原值一样,MySQL 可能仍会认为发生了“变更”,影响 affected rows 的返回值(通常变为 2)。
实际应用建议
- 适用于计数器、状态更新、缓存同步等幂等性操作。
- 比先 SELECT 再 INSERT/UPDATE 更高效,避免了多次查询和潜在的竞争条件。
- 注意不要滥用,确保业务逻辑确实符合“插入或更新”模式。
基本上就这些。只要表上有唯一约束,就可以安全使用 INSERT ON DUPLICATE KEY
UPDATE 来简化逻辑。不复杂但容易忽略细节,比如 VALUES() 的用法。
以上就是如何在mysql中使用INSERT ON DUPLICATE KEY UPDATE的详细内容,更多请关注其它相关文章!
# 全攻略
# 无锡推广网站
# 短时间怎么推广网站
# seo具体做什么分类
# 酉阳seo推广代运营
# 中国教育研究关键词排名
# 网站建设设计的价格
# 临沂网站优化联系企
# 江苏seo网站优化
# 天津快手营销推广企业
# 准营销推广么云速捷选定
# mysql
# 适用于
# 多个
# 则更
# 用户登录
# 不存在
# 小爱
# 镜像
# 主键
# 离线
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
c++20的std::jthread是什么_c++可中断线程与RAII式管理
谷歌浏览器如何快速清除某个网站的数据_Chrome网站缓存清理方法
CSS自定义字体样式被系统字体替换怎么办_font-face方式指定font-display控制渲染策略
Win10磁盘清理工具在哪 Win10打开并使用磁盘清理【教程】
在J*a中如何隐藏复杂性_使用门面模式组织对象交互
HuggingFaceEmbeddings中向量嵌入维度调整的限制与理解
谷歌邮箱网页版官方页面入口 谷歌邮箱网页端快速访问
内存检查:在VS Code中调试C++时的内存视图
HTML转PPT成品工具有哪些?HTML网页转PPT成品工具大全
在J*a中如何开发简易电子商务商品管理系统_商品管理系统项目实战解析
Yandex浏览器官方网页版入口 Yandex浏览器最新版官网
iCloud登录入口网页版 苹果iCloud官网登录
百度网盘网页版入口 百度网盘网页版官方登录网址
一加Ace 6T支持全新明眸护眼:通过了最严苛的护眼小金标认证
《刺客信条:影》PS5 Pro和Switch 2画面对比
DLsite中文平台入口 DLsite官网内容在线查看
composer 和 npm/yarn 在管理依赖方面有什么核心思想差异?
解决macOS上安装pyhdf时‘hdf.h’文件缺失的编译错误
海棠电脑版入口_通过电脑访问海棠官网阅读
腾讯视频怎么举报不良内容_腾讯视频内容举报流程与违规信息处理方法
护手霜蹭到袖口上了如何清洗? 怎样避免留下一圈油印?
Sublime怎么配置Nim语言环境_Sublime Nim代码高亮与补全
Win11怎么合并任务栏图标 Win11开启任务栏合并减少图标占空间【方法】
composer的"require-dev"部分是用来做什么的?
打开就能玩的植物大战僵尸 植物大战僵尸网页版传送门
css子元素高度不一致导致布局错位怎么办_使用align-items:stretch解决高度差异
文心一言怎样用批量生成做多版文案_文心一言用批量生成做多版文案【批量创作】
AWS EC2实例间SQL Server连接超时:安全组配置与故障排除指南
Highcharts 雷达图径向轴标签定制指南:利用多Y轴实现数值标注
黑猫投诉统一入口官网 消费者权益保护投诉平台
vivo浏览器自带的下载器速度慢怎么办 vivo浏览器提升文件下载速度的技巧
4399免费游戏网址入口 4399小游戏免费入口点开即玩
汽水音乐在线解析 汽水音乐在线解析入口
Composer的 "conflict" 字段有什么用_如何声明不兼容的包以避免依赖冲突
Composer如何在生产环境安全地执行composer update
Golang如何使用buffered channel提高性能_Golang buffered channel优化技巧
机器学习中对数变换预测结果的反向还原
顺丰快件物流信息 官方网站查询入口
ArchiveofOurOwn小说阅读-ArchiveofOurOwn同人作品访问链接
如何使用 Excel 发布器与 Power BI 分享 Excel 洞察
《明末:渊虚之羽》设计师谈设计角色:那会刚毕业 充满激情
J*aScript数组对象转换:按指定键分组与值收集
深入理解J*aScript Promise异步执行与微任务队列
Mac怎么锁定备忘录_Mac备忘录加密设置教程
蛙漫正版漫画平台入口_蛙漫免费阅读全站漫画资源
在J*a中如何在J*a中使用异常机制记录错误日志_异常日志实践经验
CSS实现侧边栏导航项全宽圆角悬停背景效果
Gmail邮箱申请注册直达_Gmail邮箱免费注册PC版官网入口2025
抖音网页版平台入口 抖音网页版官网在线访问教程
天猫双十一预售商品怎么退款_天猫双十一预售退款操作指南


2025-11-12
浏览次数:次
返回列表