一、创建测试表

1.创建唯一索引"b"

CREATE TABLE `test2` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`a` varchar(5) DEFAULT NULL,
`b` varchar(5) DEFAULT NULL,
`c` varchar(5) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `unique_b` (`b`)
) ENGINE=InnoDB AUTO_INCREMENT=74 DEFAULT CHARSET=utf

2.插入3条数据

INSERT INTO test1(a,b,c) VALUE (1,2,3),(2,4,4),(2,3,5);

  

select * from tset2;

  

二、replace into用法

1.使用replace into插入单条数据

REPLACE INTO test2(b,c) VALUE (3,3);

2 row(s) affected

Execution Time : 00:00:00:047
Transfer Time  : 00:00:00:000
Total Time     : 00:00:00:047

INSERT INTO test2(a,b,c) VALUE (1,2,3),(2,4,4),(2,3,5);

1.当插入的值和唯一索引重复时,执行更新操作,相当于执行:

delete from where b=3;
inset into test2(b,2) value(3,3);

   先删除该记录,再插入指定列,没有指定值的为默认值

  注意该数据的id加1了,数据替换之后id加1了,此处有坑,如果此id是其他的表的外键,关联关系就对不上了。

2.当插入的值和唯一索引不重复时,执行插入操作,相当于执行:

inset into test2(b,2) value(3,3);

2.使用replace into批量插入数据

INSERT INTO test2(a,b,c) VALUE (1,2,3),(2,4,4),(2,3,5);

三、DUPLICATE KEY UPDATE用法

1.插入重复单条数据

1.当唯一index重复时,直接更新update 后面的字段

INSERT INTO test2(a,b,c) VALUE (3,3,11) ON DUPLICATE KEY UPDATE  a=VALUES(a),c=VALUES(c);

2 row(s) affected

Execution Time : 00:00:01:250
Transfer Time  : 00:00:00:000
Total Time     : 00:00:01:250

INSERT INTO test2(a,b,c) VALUE (1,3,13) ON DUPLICATE KEY UPDATE  c=VALUES(c);

2 row(s) affected

Execution Time : 00:00:00:062
Transfer Time  : 00:00:00:000
Total Time     : 00:00:00:062

两条sql的区别在于后条语句更新了两个值,而前一条更新了一个值

更新指定值需要在update后面指定。

两条sql分别相当于执行了:

update test2 set a=3,c=13 where b=3;

update test2 set c=13 where b=3;

  

2.插入不重复的值

INSERT INTO test2(a,b,c) VALUE (1,5,13) ON DUPLICATE KEY UPDATE  c=VALUES(c);

1 row(s) affected

Execution Time : 00:00:00:031
Transfer Time  : 00:00:00:000
Total Time     : 00:00:00:031

三个值全部插入了,相当于执行了:

insert into test(a,b,c) value (,5,13)

id已经不连续了,说明每次unique index重复时,该表的id也会自增

2.批量插入用法

INSERT INTO test2(a,b,c) VALUE (1,5,14),(1,6,13),(1,7,13) ON DUPLICATE KEY UPDATE  a=VALUES(a),c=VALUES(c);

  

四、两者之间的区别

1.unique index重复插入时

  a.单条数据受影响的行都是2;

  b.replace 之后原来的数据更新之后会id+1,指定的值会更新,没有指定的,会更新为默认值;

  c.uplicate key只会更新指定的值,没有指定的值跟原数据保持一致;

2.unique index不重复时

  a.都相当于插入了新记录。

mysql系列十三、mysql中replace into和duplicate key的使用区的更多相关文章

  1. mysql插入数据时 insert IGNORE、ON DUPLICATE KEY UPDATE、replace into

    转: mysql insert时几个操作DELAYED .IGNORE.ON DUPLICATE KEY UPDATE的区别 博客分类: mysql基础应用   mysql insert时几个操作DE ...

  2. 重重封锁,让你一条数据都拿不到《死磕MySQL系列 十三》

    在开发中有遇到很简单的SQL却执行的非常慢,甚至只查询一行数据. 咔咔遇到的只有两种情况,一种是MySQL服务器CPU占用率很高,所有的SQL都执行的很慢直到超时,程序也直接502,另一种情况是行锁造 ...

  3. MYSQL的REPLACE和ON DUPLICATE KEY UPDATE使用

    REPLACE 我们在使用数据库时可能会经常遇到这种情况.如果一个表在一个字段上建立了唯一索引,当我们再向这个表中使用已经存在的键值插入一条记录,那将会抛出一个主键冲突的错误.当然,我们可能想用新记录 ...

  4. Mysql系列二:Mysql 开发标准规范

    原文链接:http://www.cnblogs.com/liulei-LL/p/7729983.html 一.表设计 1. 库名.表名.字段名使用小写字母,“_”分割. 2. 库名.表名.字段名不超过 ...

  5. mysql使用replace和on duplicate key update区别

    实际业务使用中,有时候会遇到插入数据库,但是如果某个属性(比如:主键)存在,就做更新.通常有两种方式:1.replace into  2.on duplicate key update 但是在使用过程 ...

  6. 关于mysql中unique的插入Duplicate key

    MySQL数据库中 如果在后台中不做判断是否unique的column是否存在的话,直接把数据操作给dao层再传给DB的话,就会报重复的唯一值.如果确实是不希望先取出判断unique的column是否 ...

  7. MySQL系列(二)--MySQL存储引擎

    影响数据库性能的因素: 1.硬件环境:CPU.内存.存盘IO.网卡流量等 2.存储引擎的选择 3.数据库参数配置(影响最大) 4.数据库结构设计和SQL语句 MySQL采用插件式存储引擎,可以自行选择 ...

  8. MySQL系列:MySQL的基本使用

    数据库的基本操作 在MySQL数据库中,对于一个MySQL示例,是可以包含多个数据库的. 在连接MySQL后,我们可以通过 show databases; 来进行查看有那么数据库.这里已经存在一些库了 ...

  9. 【MySql系列】MySql踩坑系列

    问题一:远程登录报错Host '192.168.181.201' is not allowed to connect to this MySQL server 解决: 问题二:MySql access ...

随机推荐

  1. [luogu4403][bzoj1271][BJWC2008]秦腾与教学评估

    题目描述 在秦腾进入北京大学学习的第一个学期,就不幸遇到了前所未有的教学评估.在教学评估期间,同学们被要求八点起床,十一点回宿舍睡觉,不准旷课,上课不准迟到,上课不准睡觉--甚至连著名的北大三角地也在 ...

  2. A1044. Shopping in Mars

    Shopping in Mars is quite a different experience. The Mars people pay by chained diamonds. Each diam ...

  3. bug7 java.net.BindException: 端口被占用。

    java.net.BindException:   端口被占用. java.net.BindException:   端口被占用.

  4. Solr7.1--- 生产环境搭建

    准备三台虚拟机,把Solr-7.1.0.tgz上传到三个节点上.我上传到了自定义的目录/mysoft. 我的环境是CentOS7+Solr7.1.0 如果发现图文不符,因为我之前操作截图后,关闭出去吃 ...

  5. 洛谷 P1020 导弹拦截(dp+最长上升子序列变形)

    传送门:Problem 1020 https://www.cnblogs.com/violet-acmer/p/9852294.html 讲解此题前,先谈谈何为最长上升子序列,以及求法: 一.相关概念 ...

  6. centos服务重启

    重启openstack的整个服务openstack-service restart 1. 重启dashboardservice httpd restart service memcached rest ...

  7. Nvivo

    sklearn实战-乳腺癌细胞数据挖掘(博客主亲自录制视频教程) https://study.163.com/course/introduction.htm?courseId=1005269003&a ...

  8. How to get API key (APPID)

    Python爬虫视频教程零基础小白到scrapy爬虫高手-轻松入门 https://item.taobao.com/item.htm?spm=a1z38n.10677092.0.0.482434a6E ...

  9. 学习windows编程 day4 之 映射模式

    LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { HDC hdc; PAINTSTRU ...

  10. Codeforces 950 D. A Leapfrog in the Array

    http://codeforces.com/contest/950/problem/D 前n/2个格子的奇数下标的数没有参与移动 候n/2个格子的奇数下标的数一定是一路移向偶数下标移 所以还原数的初始 ...