iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >mysql特殊语法insert into .. on duplicate key update ..使用详解
  • 107
分享到

mysql特殊语法insert into .. on duplicate key update ..使用详解

mysql数据库sql 2023-08-17 19:08:02 107人浏览 泡泡鱼
摘要

文章目录 一、前言二、insert into … on duplicate key update ...1、处理逻辑2、示例:表结构1> 不存在记录,插入的情况2> 存在记录,可以更新字段的情况3> 存在记录,不可以更新字段的情况4

一、前言

在日常开发中,经常会遇到这样的需求:查看某条记录是否存在,不存在的话创建一条新记录,存在的话更新某些字段。

比如下列伪代码:

$row = Mysql_query($result);if($row){mysql_execute('update ...');}else{mysql_execute('insert ...');}

二、insert into … on duplicate key update …

MySql针对此,提供了insert into … on duplicate key update …的语法:

  • 在insert的时候,如果insert的数据会引起唯一索引(包括主键索引)的冲突,即唯一值重复了,则不会执行insert操作,而执行后面的update操作。

注意:这个是MYSQL特有的,不是SQL标准语法;

1、处理逻辑

insert into … on duplicate key update …语句是根据唯一索引判断记录是否重复的;

  • 如果不存在记录,插入,则影响的行数为1;
  • 如果存在记录,可以更新字段,则影响的行数为2;
  • 如果存在记录,并且更新的值和原有的值相同,则影响的行数为0。

如果表同时存在多个唯一索引,只会根据第一个在数据库中存在相应value的唯一索引做duplicate判断:

2、示例:

表结构

CREATE TABLE `user2` (  `id` int(11) NOT NULL AUTO_INCREMENT,  `userName` varchar(94) NOT NULL,  `age` int(11) DEFAULT NULL,  `gender` int(1) DEFAULT NULL,  `type` int(1) DEFAULT NULL,  PRIMARY KEY (`id`),  UNIQUE KEY `idex_name` (`userName`) USING BTREE,  KEY `idx_type` (`type`) USING BTREE) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8;

user2表中有一个主键id、一个唯一索引idx_userName;

1> 不存在记录,插入的情况

insert into user2(userName, age, gender) VALUES("saint33", 99, 1) on DUPLICATE KEY UPDATE age = 88;

在这里插入图片描述

2> 存在记录,可以更新字段的情况

insert into user2(userName, age, gender) VALUES("saint33", 99, 1) on DUPLICATE KEY UPDATE age = 88;

在这里插入图片描述

3> 存在记录,不可以更新字段的情况

insert into user2(userName, age, gender) VALUES("saint33", 99, 1) on DUPLICATE KEY UPDATE age = 88;

在这里插入图片描述

4> 存在多个唯一索引时

如果表同时存在多个唯一索引,只会根据第一个在数据库中存在相应value的唯一索引做duplicate判断:

1)数据库中id = 12的记录不存在,userName="saint22"的记录存在,所以会根据第二个唯一索引userName做duplicate判断;

insert into user2(id, userName, age, gender) VALUES(12, "saint22", 99, 1) on DUPLICATE KEY UPDATE age = VALUES(gender) + 80;

在这里插入图片描述

2)数据库中id = 10的记录存在,userName="saint22"的记录存在,所以会根据第一个唯一索引id做duplicate判断;

insert into user2(id, userName, age, gender) VALUES(10, "saint22", 99, 1) on DUPLICATE KEY UPDATE age = VALUES(gender) + 90;

在这里插入图片描述

3、Update子句获取inset部分的值

Update子句可以使用values(col_name)获取insert部分的值:

insert into user2(userName, age, gender) VALUES("saint22", 99, 1) on DUPLICATE KEY UPDATE age = VALUES(age) + 100;

在这里插入图片描述

注意:VALUES()函数只在INSERT…UPDATE语句中有意义,其它时候会返回NULL;

4、last_insert_id()

如果表含有auto_increment字段,使用insert … on duplicate key update插入或更新后,last_insert_id()返回auto_increment字段的值。

来源地址:https://blog.csdn.net/Saintmm/article/details/127444881

您可能感兴趣的文档:

--结束END--

本文标题: mysql特殊语法insert into .. on duplicate key update ..使用详解

本文链接: https://www.lsjlt.com/news/373214.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作