mysql replace into 实现存在则更新,不存在则插入
测试用的mysql数据库:
新建测试表:
CREATE TABLE `test` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`text` varchar(255) DEFAULT NULL,
`uid` varchar(11) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `uid_unique` (`uid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
以上建表三个字段,id是主键自增,bigint类型。uid是字符串,但是加上了唯一约束’uid_unique‘。
(1) 添加新的数据

因为库里面没有新的数据,所以肯定是产生一条数据。

(2) 产生一条新的数据,和 id 以及 uid都不冲突的

这个时候,因为id是主键自增的,所以这个时候,会产生一个次于最大值的值,就是1002

(3)现在测试 id冲突,但是 uid不冲突的


发现会以id为 依据进行替换。
(4)测试uid冲突,但是id不冲突的。

结果:

发现会根据uid进行替换。
(5)当id和uid都冲突的时候


发现会根据这些进行替换。
(6)当uid冲突的时候,且自增主键,id为空的时候


发现这个时候会删除这条信息,然后新生成一个id。
综上所述,总的来说replace into 操作的结果是: 首先会判断是否存在冲突,可以是主键冲突,也可以是唯一约束。 然后删除这些数据,然后再插入数据。删除数据后插入的效果就跟insert into是一样的。
mysql replace into 实现存在则更新,不存在则插入的更多相关文章
- MySQL "replace into" 的坑
MySQL 对 SQL 有很多扩展,有些用起来很方便,但有一些被误用之后会有性能问题,还会有一些意料之外的副作用,比如 REPLACE INTO. 比如有这样一张表: CREATE TABLE `au ...
- MySQL replace into 说明(insert into 增强版)
MySQL replace into 说明(insert into 增强版) 在插入数据到一个表时,通常是这种情况:1. 先推断数据是否存在: 2. 假设不存在,则插入:3.假设存在,则更新. 在 S ...
- MySQL replace into (insert into 的增强版)
在使用SQL语句进行数据表插入insert操作时,如果表中定义了主键,插入具有相同主键的记录会报错: Error Code: 1062. Duplicate entry 'XXXXX' for ke ...
- mysql replace into 的使用情况
replace into的存在的几种情况 当表存在主键并且存在唯一键的时候 如果只是主键冲突 mysql> select * from auto; +----+---+------+------ ...
- Mysql replace into
mysqlsql serverinsert 在向表中插入数据的时候,经常遇到这样的情况:1. 首先判断数据是否存在: 2. 如果不存在,则插入:3.如果存在,则更新. 在 SQL Server 中可以 ...
- MySQL "replace into" 的坑以及insert相关操作
下面我们主要说一下在插入时候的几种情况: 1:insert ignore 2:replace into 3:ON DUPLICATE KEY UPDATE 关于insert ignore: 关于rep ...
- MySQL replace into 用法
讨人喜欢的 MySQL replace into 用法(insert into 的增强版) 在向表中插入数据的时候,经常遇到这样的情况:1. 首先判断数据是否存在: 2. 如果不存在,则插入:3.如果 ...
- mysql replace()用法
mysql replace实例说明: UPDATE tb1 SET f1=REPLACE(f1, 'abc', 'def'); 释:表tb1中字段f1中为abc的值更新为def.一般用于某字段中值存在 ...
- MySQL replace into 用法(insert into 的增强版)
转 http://blog.csdn.net/risingsun001/article/details/38977797 MySQL replace into 用法(insert into 的增强版) ...
随机推荐
- iobit-unlocker --- 类似 Unlocker 工具,强制删除文件或文件夹
win10 使用 Unlocker 1.9.2 常有问题,以前在win7上使用完全ok的 更换成:iobit-unlocker ,win10体验还可以,类似Unlocker 下载地址: https:/ ...
- html css 浮层 侧边栏
2019-7-1 16:02:25 星期一 实现的效果是点击, 然后从左侧滑出, 再点击, 就滑进去 <!DOCTYPE HTML> <html lang="en" ...
- 解决StrToDateTime()不是有效日期类型的问题
方法一: function GetDateFormat():string; var SysFrset: TFormatSettings; begin Result:=''; GetLocaleForm ...
- 【GMT43智能液晶模块】例程二十:LAN_DNS实验——域名解析
源代码下载链接: 链接:https://pan.baidu.com/s/16EW6AYpHpXljmBdNvMJM7g提取码:6lyk 复制这段内容后打开百度网盘手机App,操作更方便哦 GMT43购 ...
- Python中,我该如何切分字符串后保留分割符?
原文来源:https://stackoverflow.com/questions/2136556/in-python-how-do-i-split-a-string-and-keep-the-sepa ...
- pytorch占用过多CPU问题
Linux下,使用pytorch有时候会出现占用过多CPU资源的问题(占用过多线程),解决方法如下: 法一.torch.set_num_threads(int thread) (亲测比较有效) 法二. ...
- postgrelsql base64加密,JS base64解密
项目中做云桌面对接,需要在项目中查出用户的明文密码,拼接到云桌面登陆地址中,防止明文传输,做了base64加密解密,防止小白黑客盗取用户密码. postgrelsql base64加密SQL语句: 查 ...
- 使用Win10自带的截图工具
Win10自带的截图工具还是可以的,快捷键win+shift+s 截完图之后会有一个通知,你可以对截图进行二次编辑,编辑之后默认是立即保存的 再搭配着Fu图床工具使用,简直太爽了 讲一下怎么打开通知
- linux那些事儿
Linux只是一个操作系统内核而已,而GNU提供了大量的自由软件来丰富在其之上的各种应用程序.我们常说的linux实际是GNU/Linux,GNU是一个自由的操作系统.绝大多数基于Linux内核的操作 ...
- node.js执行shell命令进行服务器重启
nodejs功能强大且多样,不只是可以实现 服务器端 与 客户端 的实时通讯,另一个功能是用来执行shell命令 1.首先,引入子进程模块var process = require('child_pr ...