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。

最新文章

  1. HTML的文本格式化
  2. MVC 构建图片/文件选择器 参考其它CMS功能
  3. jquery基础事件
  4. 在线预览Office文件【效果类似百度文库】(转载)
  5. 在AngularJS应用中实现认证授权
  6. macbook pro install ubuntu
  7. JAVA 安装与配置
  8. iOS_SN_CoreData(二)
  9. ubuntu 14.04中文分词 结巴分词
  10. linux下用gtk+写比赛赌博GUI小游戏
  11. jquery各版本
  12. MySQL编码不一致导致查询结果为空
  13. Linux 依据关键字查找正在运行的进程
  14. 天天生鲜 - App设计
  15. 解决windows7笔记本下玩游戏的显示问题
  16. English trip V1 - 6.Accidents Happen! 发生意外! Teacher:Corrine Key: 过去进行时 was or were + Ving
  17. [hadoop]hadoop2.6完全分布式环境搭建
  18. MySQL 分库备份
  19. js数字进制转换
  20. MongoServerSettings Members

热门文章

  1. swoole前置基础知识 进程间通信
  2. PI薄膜相关的基本理论
  3. webdriervAPI(多窗口切换)
  4. C学习笔记-文件操作
  5. 2019 徐州icpc网络赛 E. XKC's basketball team
  6. PTA(Basic Level)1015.德才论
  7. sql server 查询某段日期某段时间内的数据
  8. ZooKeeper原理及介绍
  9. SYN攻击源码
  10. GitHub从小白到熟悉<六>