谨慎使用mysql的replace into(转载)
2024-09-03 20:46:58
MySQL 对 SQL 有很多扩展,有些用起来很方便,但有一些被误用之后会有性能问题,还会有一些意料之外的副作用,比如 REPLACE INTO。
MySQL 在数据冲突时实际上是删掉了旧记录,再写入新记录,这是使用 REPLACE INTO 时最大的一个误区,拿之前的例子来说,执行完 REPLACE INTO auto (k, v) VALUES (1, '1-1') 之后,由于新写入记录时并未给 extra 字段指定值,原记录 extra 字段的值就「丢失」了,而通常这并非是业务上所预期的,更常见的需求实际上是,当存在 k=1 的记录时,就把 v 字段的值更新为 '1-1',其他未指定的字段则保持原状,而满足这一需求的 MySQL 方言是 INSERT INTO auto (k, v) VALUES (1, '1-1') ON DUPLICATE KEY UPDATE v=VALUES(v);
鉴于此,很多使用 REPLACE INTO 的场景,实际上需要的是 INSERT INTO … ON DUPLICATE KEY UPDATE,在正确理解 REPLACE INTO 行为和副作用的前提下,谨慎使用 REPLACE INTO。
最新文章
- HTML的文本格式化
- MVC 构建图片/文件选择器 参考其它CMS功能
- jquery基础事件
- 在线预览Office文件【效果类似百度文库】(转载)
- 在AngularJS应用中实现认证授权
- macbook pro install ubuntu
- JAVA 安装与配置
- iOS_SN_CoreData(二)
- ubuntu 14.04中文分词 结巴分词
- linux下用gtk+写比赛赌博GUI小游戏
- jquery各版本
- MySQL编码不一致导致查询结果为空
- Linux 依据关键字查找正在运行的进程
- 天天生鲜 - App设计
- 解决windows7笔记本下玩游戏的显示问题
- English trip V1 - 6.Accidents Happen! 发生意外! Teacher:Corrine Key: 过去进行时 was or were + Ving
- [hadoop]hadoop2.6完全分布式环境搭建
- MySQL 分库备份
- js数字进制转换
- MongoServerSettings Members