MySQL插入去重命令_REPLACE INTO
以主键和unique索引为依据。
INSERT INTO:表中不存在对应的记录,则插入;若存在对应的记录,则报错;
INSERT IGNORE INTO:表中不存在对应的记录,则插入;若存在对应的记录,则忽略,不进行任何操作;
REPLACE INTO:表中不存在对应的记录,则插入;若存在对应的记录,则删除原有的记录,再 插入新的记录。
需要说明的是,如果插入的表没有主键或唯一索引,上述命令均直接往表中插入新的数据,不再判断记录的重复性。
REPLACE语句会返回一个数,来指示受影响的行的数目,该数是被删除和被插入的行数的和。
这里将介绍REPLACE INTO的用法和示例。
REPLACE INTO 主要有以下三种用法:
语句1:REPLACE INTO table_name (field1,field2...) values (value1,value2...);
语句2:REPLACE INTO table1_name (field1,field2...) select field3,field4... from table2_name;
语句3:REPLACE INTO table_name set field1=value1,field2=value...;
其中,语句2涉及了表复制,后续会进行详解。
mysql> select * from staff_3;
+----------+-------+
| name | slary |
+----------+-------+
| liding | |
| haofugui | |
| xiaoli | |
+----------+-------+
rows in set (0.00 sec) mysql> describe staff_3;
+-------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| name | char() | NO | PRI | | |
| slary | int() | YES | | NULL | |
+-------+----------+------+-----+---------+-------+
rows in set (0.00 sec) mysql> replace into staff_3 (name,slary) values ('xiaohua',3000);//在原表中不存在,则直接插入
Query OK, row affected (0.00 sec) mysql> select * from staff_3;
+----------+-------+
| name | slary |
+----------+-------+
| liding | |
| haofugui | |
| xiaoli | |
| xiaohua | |
+----------+-------+
rows in set (0.00 sec) mysql> replace into staff_3 (name,slary) values ('xiaohua',6000);//在原表中存在,则直接更新
Query OK, rows affected (0.00 sec) mysql> select * from staff_3;
+----------+-------+
| name | slary |
+----------+-------+
| liding | |
| haofugui | |
| xiaoli | |
| xiaohua | |
+----------+-------+
rows in set (0.00 sec)
需要说明的是,该命令在操作有重复数据时,会先删除原有数据,在插入新的数据。
示例:
mysql> describe staff_3;
+-------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+----------------+
| ID | int() | NO | PRI | NULL | auto_increment |
| name | char() | YES | UNI | NULL | |
| slary | int() | YES | | NULL | |
+-------+----------+------+-----+---------+----------------+
rows in set (0.00 sec) mysql> select * from staff_3;
+----+----------+-------+
| ID | name | slary |
+----+----------+-------+
| | liding | |
| | haofugui | |
| | xiaoli | |
| | xiaohua | |
| | xiaoming | |
+----+----------+-------+
rows in set (0.00 sec) mysql> replace into staff_3 (name,slary) values ('xiaoming',''); //插入一个已有记录的记录
Query OK, rows affected (0.00 sec) mysql> select * from staff_3; //从ID可以看出,ID=5对应的原有记录被删除了
+----+----------+-------+
| ID | name | slary |
+----+----------+-------+
| | liding | |
| | haofugui | |
| | xiaoli | |
| | xiaohua | |
| | xiaoming | |
+----+----------+-------+
rows in set (0.00 sec)
MySQL插入去重命令_REPLACE INTO的更多相关文章
- MySQL插入去重命令_INSERT IGNORE INTO
之前在介绍INSERT INTO命令时,曾经提到,该命令在执行数据插入操作时,会在数据库中对元组的主键进行检测,若没有存在,则执行插入动作,若存在,则会报错. 而INSERT IGNORE INTO命 ...
- MySQL语句和命令大全
前言 这里记录的是这两年学习工作过程中遇到的常用的 MySQL 语句和命令,部分是网上收集来的,出处已经不记得了,这里先谢过这些大佬.本文包括常见 SQL 语句,还有部分运维语句和命令,没有做详细的说 ...
- 使用pt-fifo-split 工具往mysql插入海量数据
在<mysql插入/更新数据>这篇文章提到,使用LOAD DATA INFILE语句,可以从一个文件直接加载数据到mysql中,但如果文件非常大,可能还需要对文件进行切割,分多次加载,这种 ...
- mysql 插入/更新数据
mysql 插入/更新数据 INSERT 语句 1.一次性列出全部字段的值,例如: INSERT INTO student VALUES('Chenqi','M', 29); INSERT INTO ...
- CentOS系统操作mysql的常用命令
MySQL名字的来历MySQL是一个小型关系型数据库管理系统,MySQL被广泛地应用在Internet上的中小型网站中.由于其体积小.速度快.总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了 ...
- 解决Python往MySQL插入中文时报错的问题
今天遇到一个问题,用Python往MySQL插入数据时,若数据中包含中文会报类似下面的错误: ERROR 1366: Incorrect string value: '\xE4\xB8\xAD\xE5 ...
- mysql show processlist命令 详解
SHOW PROCESSLIST显示哪些线程正在运行.您也可以使用mysqladmin processlist语句得到此信息.如果您有SUPER权限,您可以看到所有线程.否则,您只能看到您自己的线程( ...
- Mysql数据库导入命令Source详解
Mysql数据库导入命令Source详解 几个常用用例: 1.导出整个数据库 mysqldump -u 用户名 -p 数据库名 > 导出的文件名 mysqldump -u root -p dat ...
- MySQL 插入数据
MySQL 插入数据 MySQL 表中使用 INSERT INTO SQL语句来插入数据. 你可以通过 mysql> 命令提示窗口中向数据表中插入数据,或者通过PHP脚本来插入数据. 语法 以下 ...
随机推荐
- 关于Kafka broker IO的讨论
Apache Kafka是大量使用磁盘和页缓存(page cache)的,特别是对page cache的应用被视为是Kafka实现高吞吐量的重要因素之一.实际场景中用户调整page cache的手段并 ...
- [git/GitHub] git push 时报错:fatal: remote error: You can't push to git://github.com/user/xxx.git(已解决)
当使用 git push 时,提示以下错误: fatal: remote error: You can't push to git://github.com/user/xxx.git Use ht ...
- Psi Probe 安装及使用说明
这是一款 Tomcat 管理和监控工具,前身是 Lambda Probe.由于 Lambda Probe 2006不再更新,所以 PSI Probe 算是对其的一个 Fork 版本并一直更新至今. g ...
- [破解] IPhone 5S icloud dns bypass
http://ui.iclouddnsbypass.com/deviceservices/buddy/barney_activation_help_en_us.buddyml http://www.j ...
- PHP实现URL长连接转短连接方法总结
短链接,通俗来说,就是将长的URL 网址,通过程序计算等方式,转换为简短的网址字符串. 这样的话其好处为:1.内容需要:2.用户友好:3.便于管理. 实现短网址(short URL)系统比较流行的算法 ...
- oracle编码转换:AL32UTF8->ZHS16GBK
--修改Oracle数据库字符集为utf-8: SQL>conn / as sysdba; SQL>shutdown immediate; SQL>startup mount; SQ ...
- 5. 文件上传下载 与 db数据库
文件上传 formidable multer npm i formidable multer 如何使用见: https://www.npmjs.com/ util.inspect 自己查 文件上传:表 ...
- java学习之路--简单基础的面试题
1.面向对象的特征有哪些方面? 答:面向对象的特征主要有以下几个方面: 1)抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面.抽象只关注对象有哪些属性和行为,并不关注 ...
- JavaScript基础知识(Number的方法)
Number的方法 number : 数字 正数 负数 0 NaN 小数; NaN : not a number; 不是一个数字,但是属于数字类型的: 1.typeof :检测当前的数据类型的: 首先 ...
- currval &nextval的差异理解
--currval/nextval的区别 select * from 订单 delete --nextval INSERT INTO 订单(订单编号,单价) --nextval每执行一次,会在下列插入 ...