首页 > 数据库 >MYSQL中replace into的用法

MYSQL中replace into的用法

时间:2024-07-12 19:20:37浏览次数:16  
标签:name into replace item MYSQL col select

今天在编程的时候,学习了replace into的用法,真的很好用,是insert into的增强版。在向表中插入数据时,我们经常会遇到这样的情况:

1、首先判断数据是否存在;2、如果不存在,则插入;3、如果存在,则更新。

###项目成本案例:::::

  1 Integer updateTransport(Reimbursement reimbursement); DAO接口 

 1    <update id="updateTransport">  replace INTO
 2  
 3     replace INTO t_transport(ID,REIMBURSE_ID,TRANSPORT_DATE,ORIGIN,DESTINATION,REASON,TRANSPORT,COST,DELETED_FLAG)
 4 
 5 VALUES
 6     <foreach collection="transports" item="item" index="index" separator=",">
 7         (#{item.id},
 8         #{id},
 9         #{item.date},
10         #{item.origin},
11         #{item.destination},
12         #{item.reason},
13         #{item.transport},
14         #{item.cost},
15         #{item.deletedFlag})
16     </foreach>
17 </update>

 

在SQL Server中可以这样处理:

if not exists (select 1 from t where id = 1)?
insert into t(id, update_time) values(1, getdate())
else
update t set update_time = getdate() where id = 1

那么 MySQL 中如何实现这样的逻辑呢?MySQL 中有更简单的方法: replace into

replace into t(id, update_time) values(1, now());

replace into t(id, update_time) select 1, now();

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 将自动为这些列赋上默认值。

标签:name,into,replace,item,MYSQL,col,select
From: https://www.cnblogs.com/joe-tang/p/7284534.html

相关文章

  • mysql获取按日期排序获取最新的记录
    今天让一个数据查询难了。主要是对groupby理解的不够深入。才出现这样的情况这种需求,我想很多人都遇到过。下面是我模拟我的内容表我现在需要取出每个分类中最新的内容select*fromtestgroupbycategory_idorderby`date`结果如下:明显。这不是我想要的数据,原因是msyql......
  • Mybatis模糊查询MySQL中记录的的常用三种方法
    mybatis的模糊查询功能使用的很广泛,以MySQL数据库为例(不同的数据库,有些可能不支持) 常用的模糊查询有三种方法:直接使用%拼接字符串,如 '%'#{name}'%' 或 "%"#{name}"%",单引号或双引号都可以。(或者  '%${vendorId}%' )<iftest="vendorId!=nullandvendorId!=......
  • 运维系列:数据库服务器 重启mysql服务出现 ERROR 1045: Access denied for user: ‘roo
    @[TOC](数据库服务器重启mysql服务出现ERROR1045:Accessdeniedforuser:‘root@localhost’(Usingpassword:NO)怎么)数据库服务器重启mysql服务出现ERROR1045:Accessdeniedforuser:‘root@localhost’(Usingpassword:NO)怎么解决?系统是ubuntuse......
  • 重装系统后MySQL变回原来模样
    系统重装后保留mysql重装(保留原来数据)顺便换了一下安装位置此次安装采用的是压缩包安装版本:8.0.34注意:下面所有命令行均是在管理员身份下执行的!!!所遇问题环境问题,文件权限问题,服务没有相应控制功能问题解决方案环境问题问题描述:空有文件夹和曾经的数据,打开命令行却无法找......
  • KU注册链接:如何手动编译Percona Server for MySQL 5.5
    此文由KU注册链接вт989点сс编译原创,随着MySQL8.x版本的陆续更新,Percona的PerconaServerforMySQL也同样支援,不过想要在新的OS(例如DebianLinux12Bookworm)上使用旧版MySQL,Percona已经不提供5.5版DEB安装档,所以藉由此实验在DebianLinux12Bookwor......
  • 【MySQL】8.复合查询
    复合查询一.基本查询回顾(新增子查询)二.多表查询三.自连接四.子查询1.单列单行子查询2.单列多行子查询——三个关键字3.多列子查询4.在from子句中使用子查询五.合并查询六.总结一.基本查询回顾(新增子查询)//1.查询工资高于500或岗位为MANAGER的雇员,同时还要满足......
  • 【实操记录】MySQL主从配置
    本文使用MySQL原生支持的主从同步机制,详细记录了配置步骤及运维操作方法,可供大家直接参考、使用。本文假设已经部署了两台主机的MySQL软件,且数据库服务正常,详细部署步骤可本站搜索:"mysql二进制安装包部署"■■主从配置■master授权同步账户CREATEUSER'repl'@'10.19.238.2......
  • [Mysql]Buffer Pool
    MySQL的数据都是存在磁盘中的,那么我们要更新一条记录的时候,得先要从磁盘读取该记录,然后在内存中修改这条记录。那修改完这条记录是选择直接写回到磁盘,还是选择缓存起来呢?当然是缓存起来好,这样下次有查询语句命中了这条记录,直接读取缓存中的记录,就不需要从磁盘获取数据了。为此,I......
  • [Mysql]隔离级别
    隔离级别下面介绍四种因为事务的并发产生的问题:脏写假设银行账户中有100元,有事务A,BA事务把余额改为200,但还未提交这时,B事务把余额改为300,提交,如果A发生了回滚,那么账户余额回到100元,事务B无效。脏写就是已经提交的事务的写操作因为另一个还未提交的事务的回滚而失去效果,请......
  • MySQL5.7数据库优化模板
    8核16GMySQL数据库优化模板[client]#password=your_passwordport=3306socket=/tmp/mysql.sock[mysqld]port=3306socket=/tmp/mysql.sockdatadir=/usr/local/mysql/varskip-external-locking#MyISAMkey_buffer_size......