一、创建测试表

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. 冬令营前的一些计划&记录

    冬令营前的一些计划&记录 计划 yyb发现自己很多以前学过的东西完完全全不记得了,所以在接下来的时间里可能会留下多篇复习向的博客,当然也可能因为觉得没有必要复习而到处乱做题. 现在先大概归类一 ...

  2. luogu2279 消防局的设立 (贪心)

    按点的深度从大到小排序,每次取出深度最大的那个点,如果它还没被覆盖,就在它爷爷上放一个消防局,这样一定是最优的 为了判定是否被覆盖,可以记录从某点的子树中到这个点的最近消防局的距离dis[](如果没有 ...

  3. luogu3195/bzoj1010 玩具装箱(斜率优化dp)

    推出来式子然后斜率优化水过去就完事了 #include<cstdio> #include<cstring> #include<algorithm> #include ...

  4. 逆向---01.Nop、中文字符串搜索、保存修改后程序

    基础知识:(Nop:删除跳转) gcc编译链接命令: gcc -o 生成文件名 源文件名  gcc编译成汇编代码:gcc -o 生成文件名 -S 源文件名 VS查看汇编代码:(调试模式下,Ctrl+F ...

  5. Azure KeyVault设置策略和自动化添加secrets键值对

    一. 关于Azure Key Vault Azure 密钥保管库可帮助保护云应用程序和服务使用的加密密钥和机密. 借助 Key Vault,可使用密钥来加密密钥和机密(例如身份验证密钥.存储帐户密钥. ...

  6. Redis我想入门——启动

    nosql数据库出现到现在很多年了.笔者一直从事C/S模式的上开发.所以相对而言笔者只是听过却从来不知道他是什么东西.时代在变化,当年所有业务都放在一个War包的时代已经不在了.微服务已经成为了世界主 ...

  7. java.lang.OutOfMemoryError及解决方案

    主要有3种比较常见的OutOfMemory Error: java.lang.OutOfMemoryError: Java heap space java.lang.OutOfMemoryError: ...

  8. Java内存模型概念简单介绍,想深入自行百度

  9. Saltstack windows可视化操作(十四)

    在windows下通过Salt-Minion-xxxx.xx.x-AMD64-Setup.exe安装salt-minion的时候,默认是安装并开机启动salt-minion服务.但是如果以服务的方式启 ...

  10. ​python高级数据可视化视频Dash1

    在谷歌浏览器输入http://127.0.0.1:8050/后,回车,看到下图可视化结果 # -*- coding: utf-8 -*- """ Created on S ...