(转载)http://blog.zol.com.cn/2299/article_2298921.html

MySQL 自4.1版以后开始支持INSERT … ON DUPLICATE KEY UPDATE语法,使得原本需要执行3条SQL语句(SELECT,INSERT,UPDATE),缩减为1条语句即可完成。

例如ipstats表结构如下:

CREATE TABLE ipstats (
ip VARCHAR(15) NOT NULL UNIQUE,
clicks SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0'
);

原本需要执行3条SQL语句,如下:

IF (SELECT * FROM ipstats WHERE ip='192.168.0.1') {
    UPDATE ipstats SET clicks=clicks+1 WHERE ip='192.168.0.1';
} else {
    INSERT INTO ipstats (ip, clicks) VALUES ('192.168.0.1', 1);
}

而现在只需下面1条SQL语句即可完成:

INSERT INTO ipstats VALUES('192.168.0.1', 1) ON DUPLICATE KEY UPDATE clicks=clicks+1;

注意,要使用这条语句,前提条件是这个表必须有一个唯一索引或主键。

总结如下:

  1. 如果表中不存在主键记录,replace和insert*update都与insert是一样的特点。
  2. 如果表中存在主键记录,replace相当于执行delete 和 insert两条操作,而insert*update的相当于执行if exist do update else do insert操作。因此,如果replace填充的字段不全,则会导致未被更新的字段都会修改为默认值,并且如果有自增id的话,自增id会变化为最新的值(这样如果是以自增id为标志的话可能导致记录丢失);而insert*update只是更新部分字段,对于未被更新的字段不会变化(不会强制修改为默认值)。

多条记录操作:
insert into t(a,b,c) values ('a1','b1','c1'),('a2','b2','c2')
on duplicate key update t.c=values(t.c)

转载于:https://www.cnblogs.com/Robotke1/p/3192482.html

(转载)[MySQL技巧]INSERT INTO… ON DUPLICATE KEY UPDATE相关推荐

  1. mysql使用INSERT INTO ON DUPLICATE KEY UPDATE导致dead lock分析和解决

    一.事件回放 2019年1月的几天时间里每天会收到1次或者2次死锁的短信告警,死锁日志如下图. 二.检查业务场景和程序处理流程 用户打赏礼物请求处理,涉及到用户余额表和佣金账户表,以下所有操作在一个事 ...

  2. MySQL的INSERT INTO··· ON DUPLICATE KEY UPDATE使用的几种情况

    保存或更新 在MySQL数据库中,如果在insert语句后面带上ON DUPLICATE KEY UPDATE 子句,而要插入的行与表中现有记录的惟一索引或主键中产生重复值,那么就会发生旧行的更新:如 ...

  3. mysql批量insert bug_MySQL Bug insert into on duplicate key update 语法更新 text blob 大字段导致 MySQL crash...

    1. 背景 业务执行 SQL 导致 MySQL 进程 Crash,做故障切换后,新的主库又 Crash 了.查看 MySQL 错误日志,发现多次 Crash 时的堆栈相同,如下: Thread poi ...

  4. mysql批量更新,批量插入之replace语句/insert into... on duplicate key update语句

    mysql批量更新/插入数据有以下方法,使用这些方法批量插入数据/更新数据的时候就不用在代码层次增加判断数据是否已存在的逻辑了. 1:replace语句 2: insert into... on du ...

  5. MySQL插入语句insert into,insert ignore into,insert into ... on duplicate key update,replace into-解决唯一键约束

    文章目录 常用插入语句 insert into insert ignore into insert into ... on duplicate key update replace into 使用场景 ...

  6. mysql insert into on_MySQL之INSERT INTO ON DUPLICATE KEY UPDATE用法详解 | 夕辞

    MySQL数据库使用中如果主键或唯一键冲突,会报错,因此我们会用到insert into on duplicate key update语法,但是该语法具体怎么用以及返回什么值,今天就来讨论下. 首先 ...

  7. mysql 中 replace into 与 insert into on duplicate key update 的使用和不同点

    replace into和insert into on duplicate key update都是为了解决我们平时的一个问题 就是如果数据库中存在了该条记录,就更新记录中的数据,没有,则添加记录. ...

  8. [原] insert into … on duplicate key update / replace into 多行数据

    场景是这样的,我有KV型的表,建表语句如下: CREATE TABLE `dkv` (`k1` int(11) NOT NULL DEFAULT '0',`k2` int(11) NOT NULL D ...

  9. MySQL INSERT INTO...ON DUPLICATE KEY UPDATE的使用

    2019独角兽企业重金招聘Python工程师标准>>> 1. 语法规则为: INSERT [INTO] tbl_name[(col_name,...)]{VALUES} ({expr ...

最新文章

  1. [Asp.net MVC]Asp.net MVC5系列——第一个项目
  2. [转]volley-retrofit-okhttp之我们该如何选择网路框架
  3. 卡西欧9860连接电脑数据传输_轻松办公好助手,卡西欧STYLISH计算器体验记
  4. jzoj2136-(GDKOI2004)汉诺塔【找规律,模拟】
  5. [JZOJ P1288] [DP]矩阵取数
  6. 转:EXCEL数据有效性设置
  7. Linux在文件第一行添加字符,使用shell命令给文件中每一行的前面、后面、指定列添加字符...
  8. java绑定click时间_JAVA面试之vue.js(一)
  9. Linux开机启动过程(10):start_kernel 初始化(至setup_arch初期)
  10. python integral_Pycharm:应为“Integral”类型,而应为“str”
  11. ym——优化你的Java代码(新)
  12. 最新HoloLens在windows10上的开发配置(1)
  13. 常见Sql面试题及答案
  14. linux怎么查找bin文件内容,[转载]Linux 文件、内容查找(递归) ,grep ,find
  15. [项目源码]ERP进销存系统
  16. android截屏图片大小,Android截屏及图片解析
  17. 迭代算法与递归算法的概念及区别
  18. 泛型与STL Note
  19. 以替换为主的疯狂填词、sub()介绍
  20. 计算机安全知识策划书,安全知识竞赛策划书

热门文章

  1. slidingmenu 中view使用练习
  2. 在Windows Server 2008上部署SVN代码管理总结
  3. Programming Pearls Essay 01
  4. 用python监控磁盘_使用python怎么对服务器cpu和磁盘空间进行监控
  5. iperf3与netperf使用
  6. OVS vswitchd启动(三十七)
  7. java 热替换_class卸载、热替换和Tomcat的热部署的分析
  8. WSAAsyncSelect模型
  9. JVM(六)为什么新生代有两个Survivor分区?
  10. 注意ajax的同步和异步请求