首页 > 数据库 >MySQL REPLACE INTO语句

MySQL REPLACE INTO语句

时间:2024-11-21 08:56:33浏览次数:1  
标签:20 INTO REPLACE 插入 MySQL 2014 08

介绍

在向表中插入数据时,我们经常会:首先判断数据是否存在;如果不存在,则插入;如果存在,则更新。

但在 MySQL 中有更简单的方法,replace into(insert into 的增强版),当表中的旧行与 PRIMARY KEY或 UNIQUE 索引的新行具有相同的值,则在插入新行之前删除旧行,否则只就新增插入。

REPLACE 它的工作方式与 INSERT 完全相同,它是 SQL 标准的 MySQL 扩展。它要么插入,要么删除和插入。

REPLACE仅当表具有PRIMARY KEY或 UNIQUE索引时才有意义。否则,它就等于INSERT,因为没有索引可用于确定新行是否与另一行重复。

要使用 REPLACE,必须同时拥有表的INSERT和 DELETE权限。

REPLACE INTO用法

作用
当表中的旧行与 PRIMARY KEY或 UNIQUE 索引的新行具有相同的值,则在插入新行之前删除旧行,否则就只新增插入。

语法

REPLACE INTO 表名 (字段名, ...)  values(字段值, ...);

insert into 和 replace into 的区别

使用 insert into时,当表中的旧行与 PRIMARY KEY 或 UNIQUE 索引的新行具有相同的值,就会插入失败。

而使用 replace into,会完成记录替换。

示例

CREATE TABLE test (
  id INT UNSIGNED NOT NULL AUTO_INCREMENT,
  data VARCHAR(64) DEFAULT NULL,
  ts TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (id)
);

创建 test 表,运行以下语句:

mysql> REPLACE INTO test VALUES (1, 'Old', '2014-08-20 18:47:00');
Query OK, 1 row affected (0.04 sec)

mysql> REPLACE INTO test VALUES (1, 'New', '2014-08-20 18:47:42');
Query OK, 2 rows affected (0.04 sec)

mysql> SELECT * FROM test;
+----+------+---------------------+
| id | data | ts                  |
+----+------+---------------------+
|  1 | New  | 2014-08-20 18:47:42 |
+----+------+---------------------+
1 row in set (0.00 sec)

创建第二张表与第一张表几乎相同,但主键现在是覆盖两列,如下所示:

CREATE TABLE test2 (
  id INT UNSIGNED NOT NULL AUTO_INCREMENT,
  data VARCHAR(64) DEFAULT NULL,
  ts TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (id, ts)
);

当我们在test表上运行test2相同的两个REPLACE语句时,我们得到了不同的结果:

mysql> REPLACE INTO test2 VALUES (1, 'Old', '2014-08-20 18:47:00');
Query OK, 1 row affected (0.05 sec)

mysql> REPLACE INTO test2 VALUES (1, 'New', '2014-08-20 18:47:42');
Query OK, 1 row affected (0.06 sec)

mysql> SELECT * FROM test2;
+----+------+---------------------+
| id | data | ts                  |
+----+------+---------------------+
|  1 | Old  | 2014-08-20 18:47:00 |
|  1 | New  | 2014-08-20 18:47:42 |
+----+------+---------------------+
2 rows in set (0.00 sec)

这是因为,当运行 REPLACE INTO 时,test2表中,列值id和ts列值,必须与要替换行的现有行的值进行相匹配;否则,插入一行。

标签:20,INTO,REPLACE,插入,MySQL,2014,08
From: https://www.cnblogs.com/ataoxz/p/18559852

相关文章

  • MySQL REPLACE函数:字符串替换
    语法REPLACE(string_expression,string_pattern,string_replacement)替换字符串,接受3个参数,分别是原字符串,被替代字符串,替代字符串。string_expression为搜索的字符串表达式,可以为字符或二进制数据类型。string_pattern为要查找的子字符串,可以为字符或二进制数据类......
  • Mysql 笔记
    ---------------------------作业------------------------------createtablestuinfo(snochar(8)primarykeynotnullcomment'学号',snamechar(10)uniquecomment'姓名',ssexchar(2)default'男');createtablestuc......
  • 基于Java+Springboot+Jpa+Mysql实现的在线网盘文件分享系统功能设计与实现四
    一、前言介绍:免费学习:猿来入此1.1项目摘要在线网盘文件分享系统的课题背景主要源于现代社会对数字化信息存储和共享需求的日益增长。随着互联网的普及和技术的快速发展,人们越来越依赖电子设备来存储和传输各种类型的数据文件。然而,传统的本地存储方式存在诸多不便,如空间有限、......
  • 基于Java+Springboot+Jpa+Mysql实现的在线网盘文件分享系统功能设计与实现三
    一、前言介绍:免费学习:猿来入此1.1项目摘要在线网盘文件分享系统的课题背景主要源于现代社会对数字化信息存储和共享需求的日益增长。随着互联网的普及和技术的快速发展,人们越来越依赖电子设备来存储和传输各种类型的数据文件。然而,传统的本地存储方式存在诸多不便,如空间有限、......
  • MySQL高级(四):索引
    基础概念什么是索引?索引是一种数据结构,用于加速查询的过程。它类似于书本的目录,可以快速定位数据行。MySQL索引主要是基于B+树(也有其他类型如哈希索引、全文索引等)来实现的。为什么使用索引?加速查询:索引可以显著提高查询速度,尤其是当数据量大的时候。减少I/O操作:通......
  • MySQL训练营-准备阶段
    MySQL训练营-准备阶段系列介绍:学习丁奇老师的MySQL训练营的学习笔记安装Docker为了实操老师课中的内容,在自己的linux小主机上使用docker搭建环境进行测试。Docker安装教程,参考:https://www.cnblogs.com/lqqgis/p/18276118安装后dockerps命令报错:permissiondeniedwhiletr......
  • 瑞吉外卖数据库主从复制时无法与MySQL数据库建立连接
    在Linux里边,数据库主从复制的框架已经搭建好了,在前边的测试项目rw_demo里,测试查询添加的时候没有遇到问题到在瑞吉外卖实现的时候,遇到问题:2024-11-2020:01:06.524ERROR14856---[eate-2045143855]com.alibaba.druid.pool.DruidDataSource:createconnectionSQLExceptio......
  • MySQL 中 InnoDB 支持的四种事务隔离级别名称,以及逐级之间的区别?
    MySQL中的InnoDB存储引擎支持四种事务隔离级别,这些级别定义了事务在并发环境中的行为和相互之间的可见性。以下是这四种隔离级别的名称以及它们之间的区别:读未提交(ReadUncommitted)特点:这是最低的隔离级别,允许事务读取未提交的数据。问题:可能导致脏读、不可重复读和幻读。区......
  • MYSQL|索引
    MYSQL|索引索引是关系数据库中对某一列或多个列的值进行预排序的数据结构通过使用索引,可以让数据库系统不必扫描整个表,而是直接定位到符合条件的记录,这样就大大加快了查询速度。对于主键,关系数据库会自动对其创建主键索引。使用主键索引的效率是最高的,因为主键会保证绝对唯一。......
  • 【MySQL】MySQL表的基本操作入门指南
    ......