前提:操作的表具有主键或唯一索引

INSERT INTO:表中不存在对应的记录,则插入;若存在对应的记录,则报错;

INSERT INTO IGNORE:表中不存在对应的记录,则插入;若存在对应的记录,则忽略,不进行任何操作

REPLACE INTO:表中不存在对应的记录,则插入;若存在对应的记录,则删除原有的记录,再 插入新的记录。

ON DUPLICATE KEY UPDATE(on duplicate key update)的功能类似于REPLACE INTO:

若表中不存在数据(没有待插入记录的主键值或唯一索引值),则直接插入新的记录;

若表中已存在数据(主键或唯一索引值相同),则执行更新操作。

所以,ON DUPLICATE KEY UPDATE与REPLACE INTO在操作过程上不同的是:

当已存在数据时,ON DUPLICATE KEY UPDATE执行更新操作,而不是先删除原有记录,再插入新记录。

语句:INSERT INTO table_name (field1,field2...) values (value1,value2...) on duplicate key update filed3=value3;

说明:update后面接的语句可以是其它表达式。

假设有一个以下table:

mysql> select * from staff_3;
+----+----------+-------+
| ID | 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)

进行on duplicate key on命令:(从ID可以看出,该命令执行更新操作别浪费自增属性值)

mysql> insert into staff_3 (name,slary) values ('xiaoli',) on duplicate key update slary=;
Query OK, rows affected (0.00 sec) mysql> select * from staff_3;
+----+----------+-------+
| ID | name | slary |
+----+----------+-------+
| | liding | |
| | haofugui | |
| | xiaoli | |
| | xiaohua | |
+----+----------+-------+
rows in set (0.00 sec) mysql> insert into staff_3 (name,slary) values ('xiaoming',) on duplicate key update slary=;
Query OK, row affected (0.00 sec) mysql> select * from staff_3;
+----+----------+-------+
| ID | name | slary |
+----+----------+-------+
| | liding | |
| | haofugui | |
| | xiaoli | |
| | xiaohua | |
| | xiaoming | |
+----+----------+-------+
rows in set (0.00 sec)

MySQL插入更新_ON DUPLICATE KEY UPDATE的更多相关文章

  1. MySQL_插入更新 ON DUPLICATE KEY UPDATE

    平时我们在设计数据库表的时候总会设计 unique  或者 给表加上 primary key 的限制条件. 此时 插入数据的时候 ,经常会有这样的情况: 我们想向数据库插入一条记录: 若数据表中存在以 ...

  2. Mysql中INSERT ... ON DUPLICATE KEY UPDATE的实践

    转: Mysql中INSERT ... ON DUPLICATE KEY UPDATE的实践 阿里加多 0.1 2018.03.23 17:19* 字数 492 阅读 2613评论 2喜欢 1 一.前 ...

  3. [转]主键冲突的话就更新否则插入 (ON DUPLICATE KEY UPDATE )

    mysql "ON DUPLICATE KEY UPDATE" 语法如果在INSERT语句末尾指定了ON DUPLICATE KEY UPDATE,并且插入行后会导致在一个UNIQ ...

  4. mysql 添加数据如果数据存在就更新ON DUPLICATE KEY UPDATE和REPLACE INTO

    #下面建立game表,设置name值为唯一索引. CREATE TABLE `game` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar( ...

  5. MySQL的INSERT ··· ON DUPLICATE KEY UPDATE使用的几种情况

    在MySQL数据库中,如果在insert语句后面带上ON DUPLICATE KEY UPDATE 子句,而要插入的行与表中现有记录的惟一索引或主键中产生重复值,那么就会发生旧行的更新:如果插入的行数 ...

  6. MySQL-插入更新 ON DUPLICATE KEY UPDATE

    向数据库中插入一条记录,若该数据的主键值(UNIQUE KEY)已经在表中存在,则执行后面的 UPDATE 操作.否则执行前面的 INSERT 操作. 测试表结构 CREATE TABLE `flum ...

  7. SQLSERVER 中实现类似Mysql的 INSERT ON DUPLICATE KEY UPDATE

    通过SQLServer创建索引时,有一个IGNORE_DUP_KEY的选项,可以类似实现. IGNORE_DUP_KEY = { ON | OFF } 指定对唯一聚集索引或唯一非聚集索引执行多行插入操 ...

  8. mysql插入数据时 insert IGNORE、ON DUPLICATE KEY UPDATE、replace into

    转: mysql insert时几个操作DELAYED .IGNORE.ON DUPLICATE KEY UPDATE的区别 博客分类: mysql基础应用   mysql insert时几个操作DE ...

  9. mysql插入操作跳过(ignore)、覆盖(replace into)、更新(on duplicate key)

    原帖地址:http:.html .insert ignore into 当插入数据时,如出现错误时,如重复数据,将不返回错误,只以警告形式返回.所以使用ignore请确保语句本身没有问题,否则也会被忽 ...

随机推荐

  1. python print 打印的数据包含中文,打印报错UnicodeDecodeError: 'gbk' codec can't decode bytes in position 459-460: illegal multibyte sequence解决办法

    python 2.7 print 的数据中若包括中文,打印则会报错UnicodeDecodeError: 'gbk' codec can't decode bytes in position 459- ...

  2. 深入理解 Java 虚拟机之学习笔记(3)

    垃圾回收(Garbage Collection,GC ),GC的历史其实比Java久远,1960年诞生与MIT的Lisp是第一门真正使用内存动态分配和垃圾收集技术的语言.当Lisp还在胚胎时期时,人们 ...

  3. VMPlayer Ubuntu 16.04 Copy and Paste with Host 主机与宿机之间的复制粘贴

    使用Ubuntu的虚拟机时如果不能主机之间进行复制粘粘,会非常非常的不方便,所以我们需要安装vmware tools,使用如下的代码(注意第二句一定要有,不然还是不能复制粘贴): sudo apt-g ...

  4. less的安装与用法

    1. node.js node.js是一个前端的框架 自带一个包管理工具npm node.js 的安装 官网:http://nodejs.cn/ 在命令行检验是否安装成功 打开cmd 切换到项目目录, ...

  5. 【C++ mid-term exerises】

    1. 用掷骰子方式,模拟班级每个学号被随机抽点的概率. (12分) 具体要求如下: (1)设计并实现一个骰子类Dice. ① 数据成员sides表示骰子面数.构造时,指定骰子是6面,8面,还是其它数值 ...

  6. 调用微信定位功能 lat _ lng php方法

    {:wx_jssdk_config("false")} //最主要的这一句 没有这一句在微信浏览器里是无法调用的定位功能的.下面有这个方法说明 <script> wx. ...

  7. HTML、CSS知识点,面试开发都会需要--No.5 文章段落

    No.5 文章段落 1.文字属性 文字属性包含font-*和text-*两类. 2.基于font的属性 (1)font-family:字体属性,多个字体之前用逗号隔开.如果第一个字体没找到,则依次找后 ...

  8. The missing package manager for macOS (or Linux)

    The missing package manager for macOS (or Linux) — Homebrew https://brew.sh/

  9. MAC OSX 开启/禁用SafeSleep功能

    如果想要禁用,我们需要在终端中输入下面的命令: 然后定位到/private/var/vm/删除已经存在的sleepimage文件 cd /private/var/vm/ 使用下面的命令删除该文件 su ...

  10. Java学习-050-AES256 之 java.security.InvalidKeyException: Illegal key size or default parameters 解决方法

    在进行 Java AES 加密测试时,出现如下错误信息: java.security.InvalidKeyException: Illegal key size or default paramete ...