首页 > 数据库 >一条mysql 存在该记录则更新,不存在则插入记录的sql

一条mysql 存在该记录则更新,不存在则插入记录的sql

时间:2023-05-09 14:33:05浏览次数:47  
标签:INSERT 记录 sql UPDATE DUPLICATE VALUES KEY mysql


一条mysql教程 存在该记录则更新,不存在则插入记录的sql

INSERT table (auto_id, auto_name) values (1, ‘yourname') ON DUPLICATE KEY UPDATE auto_name='yourname'

ON DUPLICATE KEY UPDATE的使用
如果您指定了ON DUPLICATE KEY UPDATE,并且插入行后会导致在一个UNIQUE索引或PRIMARY KEY中出现重复值,则执行旧行UPDATE。例如,如果列a被定义为UNIQUE,并且包含值1,则以下两个语句具有相同的效果:
复制代码 代码如下:
mysql> INSERT INTO table (a,b,c) VALUES (1,2,3)
-> ON DUPLICATE KEY UPDATE c=c+1;
mysql> UPDATE table SET c=c+1 WHERE a=1;

如果行作为新记录被插入,则受影响行的值为1;如果原有的记录被更新,则受影响行的值为2。
注释:如果列b也是唯一列,则INSERT与此UPDATE语句相当:
复制代码 代码如下:
mysql> UPDATE table SET c=c+1 WHERE a=1 OR b=2 LIMIT 1;

如果a=1 OR b=2与多个行向匹配,则只有一个行被更新。通常,您应该尽量避免对带有多个唯一关键字的表使用ON DUPLICATE KEY子句。
您可以在UPDATE子句中使用VALUES(col_name)函数从INSERT...UPDATE语句的INSERT部分引用列值。换句话说,如果没有发生重复关键字冲突,则UPDATE子句中的VALUES(col_name)可以引用被插入的col_name的值。本函数特别适用于多行插入。VALUES()函数只在INSERT...UPDATE语句中有意义,其它时候会返回NULL。
示例:
复制代码 代码如下:
mysql> INSERT INTO table (a,b,c) VALUES (1,2,3),(4,5,6)
-> ON DUPLICATE KEY UPDATE c=VALUES(a)+VALUES(b);

本语句与以下两个语句作用相同:
复制代码 代码如下:
mysql> INSERT INTO table (a,b,c) VALUES (1,2,3)
-> ON DUPLICATE KEY UPDATE c=3;
mysql> INSERT INTO table (a,b,c) VALUES (4,5,6)
-> ON DUPLICATE KEY UPDATE c=9;

当您使用ON DUPLICATE KEY UPDATE时,DELAYED选项被忽略。

------------------------------------------------------------------------------------------------------------------------

MySQL has a special construct for this. Assume the 'username' column below is UNIQUE:

INSERT INTO users (username, email) VALUES ('Jo', '[email protected]')
ON DUPLICATE KEY UPDATE email = '[email protected]'

The 'ON DUPLICATE KEY' statement only works on PRIMARY KEY and UNIQUE columns.<!-- google_ad_section_end -->

标签:INSERT,记录,sql,UPDATE,DUPLICATE,VALUES,KEY,mysql
From: https://blog.51cto.com/u_16104661/6258346

相关文章

  • NetBackup 10.2 新功能介绍:PostgreSQL 和 MySQL 自动化恢复达成
    原文来自:VERITAS中文社区2023-04-27在执行恢复任务时,手动提取、更新数据库和实例并将其附加到PostgreSQL和MySQL是常规操作。而在最新的NetBackup10.2版本中,执行恢复已不再需要上述手动流程,PostgreSQL和MySQL数据库的备份恢复变得更加便捷、高效。正所谓:NetBackup......
  • PG系、Oracle、MySQL数据库在特定场景下结果差异分析
    PG系、Oracle、MySQL数据库在特定场景下结果差异分析作者:余从佳更新时间:2022-07-0110:52人气值:416 本文主要介绍以PolarDBO引擎、ADBPG为代表的PG系数据库在某种特定事务场景下,其事务结果与Oracle、MySQL不同的现象,并分析该现象出现的原因。一、数据初始化 Cr......
  • MySQL(二十)锁(一)锁的概述与S、X锁
    MySQL(二十)锁(一)锁概述、S锁和X锁1概述锁是计算机协调多个线程或进程并发访问某一资源的机制。​ 在程序开发过程中会存在多线程同步的问题,当多个线程并发访问某个数据的时候,尤其是一些敏感的数据(如金额、订单等),就需要保证这个数据在任何时刻都最多只有一个线程在访问,以保证......
  • MySQL(二十)锁(三)乐观锁与悲观锁、显示隐式锁和其他锁
    MySQL(二十)锁(三)乐观锁与悲观锁显式锁和隐式锁1从对待锁的态度划分:乐观锁、悲观锁从对待锁的态度划分,可以将锁划分为乐观锁和悲观锁,可以看出这两种锁是两种对待数据并发的思维方式。乐观锁和悲观锁并不是锁,而是锁的设计思想1.1乐观锁乐观锁对数据被其他事务修改持有乐观......
  • MySQL(二十)锁(二)表锁、行锁与页级锁
    目录MySQL(二十)锁(二)表锁、行锁与页级锁从操作粒度的锁类型划分:表级锁、行级锁和页锁1表级锁(TableLock)1.1表级别的S和X锁1.2意向锁......
  • MySQL(二十一)MVCC多版本并发控制
    MySQL(二十一)MVCC多版本并发控制1什么是MVCCMVCC(MultiversionConcurrencyControl)多版本并发控制。即通过数据行的多个版本管理来实现数据库的并发控制,使得在InnoDB事务隔离级别下执行一致性读操作有了保障。就是为了查询一些正在被其他事务更新的值的时候,能够查到它们被更......
  • MySQL(十八)MySQL事务(二):事务的隔离级别
    MySQL(十八)MySQL事务(二):事务的隔离级别​ MySQL是一个客户端/服务器架构的软件,可以有若干个客户端与之连接,连接上之后都可以被称作是一个会话,每个客户端都可以在自己的会话中向服务器发出请求语句,一个请求语句可能是事务的一部分,因此对于服务器来说需要同时处理多个事务。由于事......
  • MySQL(十九)MySQL事务日志(一)RedoLog
    MySQL(十九)MySQL事务日志(一)RedoLog​ 事务的四种特性:原子性、一致性、持久性和隔离性都是基于什么机制实现的?事务的隔离性由锁机制实现而事务的原子性、一致性和持久性则由事务的redo和undo日志来实现的redolog是重做日志,提供再写入操作,恢复提交事务修改的页的操作......
  • mysql 索引
    mysql索引按存储方式区分: 一:b树,通常是使用b树这种方式,只有一个根节点,叶子节点之间彼此相连 二:hash,首先不能使用hash索引排序,并且它只支持等值索引,比如"=""in()""<=>"。 不支持键的部分匹配,因为计算hash值的时候是根据整体索引值来计算的。 建立hash索引相比b树需要更长的......
  • MySQL(十九)MySQL事务日志(二)UndoLog
    MySQL(十九)MySQL事务日志(二)UndoLog1undo日志概述​ redolog是事务持久性的保障,而undolog则是事务原子性和一致性的保证,如上图,在事务中更新数据的前置操作其实是需要将数据写入到undolog方便回滚。​ 事务需要保证原子性,也就是事务中的操作要么全部完成、要么全部不做。......