细说mysql replace into用法

 更新时间:2021年03月17日 00:20:31   作者:周伯通  
这篇文章主要介绍了细说mysql replace into,需要的朋友可以参考下

replace语句在一般的情况下和insert差不多,但是如果表中存在primary 或者unique索引的时候,如果插入的数据和原来的primary key或者unique相同的时候,会删除原来的数据,然后增加一条新的数据,所以有的时候执行一条replace语句相当于执行了一条delete和insert语句。直接上实例吧:

新建一个test表,三个字段,id,title,uid,  id是自增的主键,uid是唯一索引;

CREATE TABLE `test` (
 `Id` int(11) NOT NULL AUTO_INCREMENT,
 `title` varchar(25) DEFAULT NULL COMMENT '标题',
 `uid` int(11) DEFAULT NULL COMMENT 'uid',
 PRIMARY KEY (`Id`),
 UNIQUE KEY `uid` (`uid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

insert into test(title,uid) VALUES ('你好','1');
insert into test(title,uid) VALUES ('国庆节','2');

结果如下:

使用 replace into插入数据时:

REPLACE INTO test(title,uid) VALUES ('这次是8天假哦','3');

当uid存在时,使用replace into 语句

REPLACE INTO test(title,uid) VALUES ('这是Uid=1的第一条数据哦','1');

没有预料到 MySQL 在数据冲突时(也就是uid发生重复数据时)实际上是删掉了旧记录,再写入新记录,。通过以上实例,相信博友们可以看出:

replace into 跟 insert 功能类似,不同点在于:replace into 首先尝试插入数据到表中,

 1. 如果发现表中已经有此行数据(根据主键或者唯一索引判断)则先删除此行数据,然后插入新的数据。 2. 否则,直接插入新数据。

要注意的是:插入数据的表必须有主键或者是唯一索引!否则的话,replace into 会直接插入数据,这将导致表中出现重复的数据。

MySQL replace into 有三种形式:

1. replace into tbl_name(col_name, ...) values(...)

2. replace into tbl_name(col_name, ...) select ...

3. replace into tbl_name set col_name=value, ...

第一种形式类似于insert into的用法,

第二种replace select的用法也类似于insert select,这种用法并不一定要求列名匹配,事实上,MYSQL甚至不关心select返回的列名,它需要的是列的位置。例如,replace into tb1( name, title, mood) select rname, rtitle, rmood from tb2;?这个例子使用replace into从?tb2中将所有数据导入tb1中。

第三种replace set用法类似于update set用法,使用一个例如“SET col_name = col_name + 1”的赋值,则对位于右侧的列名称的引用会被作为DEFAULT(col_name)处理。因此,该赋值相当于SET col_name = DEFAULT(col_name) + 1。

前两种形式用的多些。其中 “into” 关键字可以省略,不过最好加上 “into”,这样意思更加直观。另外,对于那些没有给予值的列,MySQL 将自动为这些列赋上默认值。

相关文章

  • MySQL性能优化的一些技巧帮助你的数据库

    MySQL性能优化的一些技巧帮助你的数据库

    你完成了你的品牌新的应用程序,一切工作就像一个魅力;突然间,一个大爆发的用户杀死你的MySQL服务器,您的网站已关闭,是什么问题导致的呢?以下是MySQL性能优化的一些技巧,将帮助你,帮助你的数据库
    2013-01-01
  • MySQL由浅入深掌握连接查询

    MySQL由浅入深掌握连接查询

    连接查询是关系数据库中最主要的查询,主要包括内连接、外连接和交叉连接等。通过连接运算符可以实现多个表查询。连接是关系数据库模型的主要特点,也是它区别于其它类型数据库管理系统的一个标志
    2022-03-03
  • 初学者从源码理解MySQL死锁问题

    初学者从源码理解MySQL死锁问题

    这篇文章主要讲的是如何通过调试 MySQL 源码,知道一条 SQL 真正会拿哪些锁,不再抓虾,瞎猜或者何登成大神没写过的场景就不知道如何处理了,下面小编来和大家一起学习学习
    2019-05-05
  • 两种方法实现mysql分组计数,范围汇总

    两种方法实现mysql分组计数,范围汇总

    这篇文章主要介绍了两种方法实现mysql分组计数,范围汇总,文中示例代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-07-07
  • 深入讲解MySQL Innodb索引的原理

    深入讲解MySQL Innodb索引的原理

    这篇文章主要给大家介绍了关于MySQL Innodb索引原理的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用mysql具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-11-11
  • Linux下安装mysql-5.6.4 的图文教程

    Linux下安装mysql-5.6.4 的图文教程

    在开始安装前,先说明一下mysql-5.6.4与较低的版本在安装上的区别,从mysql-5.5起,mysql源码安装开始使用cmake了,因此当我们配置安装目录./configure --perfix=/.....的时候和以前的会有些区别,这点我们稍后会提到
    2013-06-06
  • 一次神奇的MySQL死锁排查记录

    一次神奇的MySQL死锁排查记录

    这篇文章主要给大家介绍了一次神奇的MySQL死锁排查的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Mysql具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-03-03
  • mysql报错RSA private key file not found的解决方法

    mysql报错RSA private key file not found的解决方法

    当MySQL报错RSA private key file not found时,可能是由于MySQL的RSA私钥文件丢失或者损坏导致的,此时可以重新生成RSA私钥文件,以解决这个问题
    2023-06-06
  • 深入理解MySQL中的事务机制

    深入理解MySQL中的事务机制

    这篇文章主要介绍了MySQL中的事务机制,事务机制在各大MySQL教程中均为重要知识,需要的朋友可以参考下
    2015-06-06
  • MySQL语句整理及汇总介绍

    MySQL语句整理及汇总介绍

    今天小编就为大家分享一篇关于MySQL语句整理及汇总介绍,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01

最新评论