MySQL REPLACE INTO语句
介绍
在向表中插入数据时,我们经常会:首先判断数据是否存在;如果不存在,则插入;如果存在,则更新。
但在 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列值,必须与要替换行的现有行的值进行相匹配;否则,插入一行。
MySQL REPLACE INTO语句的更多相关文章
- MySQL replace函数替换字符串语句的用法(mysql字符串替换)
MySQL replace函数我们经常用到,下面就为您详细介绍MySQL replace函数的用法,希望对您学习MySQL replace函数方面能有所启迪. 最近在研究CMS,在数据转换的时候需要用 ...
- 慎用MySQL replace语句
语法: REPLACE [LOW_PRIORITY | DELAYED] [INTO] tbl_name [PARTITION (partition_name,...)] [(col_name,... ...
- mysql 数据库插入语句之insert into,replace into ,insert ignore
近期才发现mysql的插入语句竟然有如此多的使用方法,这里拿来分享一下. ①关于insert into : insert into table_name values(); insert into t ...
- mysql replace语句
语法 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 REPLACE [LOW_PRIORITY | DELAYED] [INTO] tbl_name [ ...
- Mysql的replace into语句
Mysql语句 replace into 跟 insert 功能类似,不同点在于:replace into 首先尝试插入数据到表中, 1. 如果发现表中已经有此行数据(根据主键或者唯一索引判断)则先删 ...
- Mysql Replace语句的使用
Mysql Replace语句的语法: REPLACE [LOW_PRIORITY | DELAYED] [INTO] tbl_name [(col_name,...)] VALUES ({expr ...
- MySql的replace into 语句
MySQL REPLACE语句介绍 MySQL的REPLACE语句是一个MySQL扩展于SQL标准的语句. 官方定义:REPLACE works exactly like INSERT, except ...
- MySQL中使用replace into语句批量更新表数据
作为示例,我们在这里使用名为testdb的数据库,并且在其中创建两张一模一样的表: drop table if exists test_table_1; create table test_table ...
- Mysql 常用 SQL 语句集锦
Mysql 常用 SQL 语句集锦 基础篇 //查询时间,友好提示 $sql = "select date_format(create_time, '%Y-%m-%d') as day fr ...
- MySQL replace into 使用详解 及 注意事项
REPLACE的运行与INSERT很相似.只有一点例外,假如表中的一个旧记录与一个用于PRIMARY KEY或一个UNIQUE索引的新记录具有相同的值,则在新记录被插入之前,旧记录被删除.注意:除非表 ...
随机推荐
- Qt/C++音视频开发48-推流到rtsp服务器
一.前言 之前已经打通了rtmp的推流,理论上按照同样的代码,只要将rtmp推流地址换成rtsp推流地址,然后格式将flv换成rtsp就行,无奈直接遇到协议不支持的错误提示,网上说要换成rtp,换了也 ...
- Qt设置运行时动态库路径的几点说明
随着需求的不断增加,程序不断变大,用到的动态库也越来越多,到了发布程序的时候你会发现和可执行文件同一目录下文件数量真多(比如著名的金融软件 https://www.webull.com/ 哎呀我去,目 ...
- opencv中 在特征点匹配代码举例,以及queryIdx和trainIdx的用法
一.用法 在特征点匹配中,queryIdx和trainIdx是匹配对中的两个索引,用于指示匹配点在不同图像或特征向量中的位置.1.假设我们有两幅图像A和B,并使用特征点提取算法(如SIFT)从它们中提 ...
- JavaScript中find()和 filter()方法的区别小结
前言 JavaScript 在 ES6 上有很多数组方法,每种方法都有独特的用途和好处. 在开发应用程序时,大多使用数组方法来获取特定的值列表并获取单个或多个匹配项. 在列出这两种方法的区别之前,我们 ...
- [云研发]腾讯云cloudstudio使用教程-记录1
cloudstudio 在vscode中新建终端,使用nvidia-smi查看显卡与gpu情况,可知当前使用的显卡是T4的,显存有15G
- Dynamic CRM插件程序集中引入第三方dll合并打包
有时候 在插件程序集不可避免的需要使用第三方的dlll 但crm插件平台注册时 只能注册一个dll 即项目自身的dll 第三方的dll无法正常在注册后使用 查找官方资料 找到如下方法 合并打包成一个d ...
- Qwen2ForSequenceClassification文本分类实战和经验分享
本文主要使用Qwen2ForSequenceClassification实现文本分类任务. 文章首发于我的知乎:https://zhuanlan.zhihu.com/p/17468021019 一.实 ...
- Ellyn-Golang调用级覆盖率&方法调用链插桩采集方案
词语解释 Ellyn要解决什么问题? 在应用程序并行执行的情况下,精确获取单个用例.流量.单元测试走过的方法链(有向图).出入参数.行覆盖等运行时数据,经过一定的加工之后,应用在覆盖率.影响面评估.流 ...
- golang学习链接
GitHub入门: https://github.com/rubyhan1314/Golang-100-Days Golang中国: https://www.qfgolang.com/
- 一个WPF下的虚拟键盘实现
给上位机触摸屏做一个虚拟键盘,这玩意儿不就是一排的网格里面放满button嘛 .说归这样说 依然还是有一堆细节需要你去处理的.不论如何 先画个键盘吧. 简单的从网上找个键盘位图做参照使用 4行Grid ...