有时我们在往数据库插入数据的时候,需要判断某个字段是否存在,如果存在则执行更新操作,如果不存在则执行插入操作,如果每次首先查询一次判断是否存在,再执行插入或者更新操作,就十分不方便。

ON DUPLICATE KEY UPDATE

这个时候可以给这个字段(或者几个字段)建立唯一索引,同时使用以下 sql 语句进行插入或更新操作:

INSERT INTO table (id, user_id, token) VALUES (NULL, '2479031', '232') ON DUPLICATE KEY UPDATE user_id = VALUES(user_id), token = VALUES(token), online = VALUES(online)

MySQL 给字段添加唯一索引

添加唯一索引 sql:

ALTER TABLE table_name ADD UNIQUE (column_list)

注意:如果没有唯一索引,则无法触发 ON DUPLICATE KEY 这样的事件,DUPLICATE 表示重复的意思,如某个字段没有添加唯一索引,则不认为插入同样的值是重复的,所以对不可重复的字段必须建立唯一索引。

实例说明

如一个需求是提供一个接口给 IOS 端,用于上报用户 id,设备,在线状态等信息,接口以 GET 方式传参,用户每次打开或退出 APP 就请求接口。

接口收到请求,将信息记录到数据库,根据用户 id 进行判断,如果存在则更新,不存在就新增。

这个时候 sql 语句使用上面介绍的 on duplicate key update 语句。

INSERT INTO table (id, user_id, token) VALUES (NULL, '2479031', '232') ON DUPLICATE KEY UPDATE user_id = VALUES(user_id), token = VALUES(token), online = VALUES(online)

以这个 sql 为例,其中 user_id 是唯一索引字段,如果 insert 的时候该 user_id 已经存在,那么就将触发更新而不是插入,此时相当于执行了:

update table set user_id = 2479031 token = 232 where user_id = 2479031

这就是唯一索引和 ON DUPLICATE KEY UPDATE 的用法。

mysql 唯一更新_MySQL 唯一索引和插入重复自动更新相关推荐

  1. mysql 唯一索引与插入重复自动更新

    在我们使用mybatis对mysql数据库进行增删改查的时候,可能会碰到比较棘手的情况,如这个问题: 当主键id自增时,同一个订单号下的数据可能经过多次更新,且要保证数据库中订单号唯一不重复,我们只能 ...

  2. ef mysql自动更新_EF Core中怎么实现自动更新实体的属性值到数据库

    我们在开发系统的时候,经常会遇到这种需求数据库表中的行被更新时需要自动更新某些列. 数据库 比如下面的Person表有一列UpdateTime,这列数据要求在行被更新后自动更新为系统的当前时间. Pe ...

  3. Win10强制更新怎么关闭 彻底禁止Windows自动更新

    很多Win10用户来说经常会遇到这样的烦恼,电脑系统会不时的提醒自动更新,而且一等就要等很长时间,而通过手动禁止Windows update自带更新服务,往往会出现死灰复燃现象. 自己的电脑,竟然做不 ...

  4. Win10自动更新永久关闭,有效的Win10强制更新关闭方法,禁止windows10自动更新,禁止update medic service ,win10显示更新并关机没有单独的关机按钮

    Win10自动更新永久关闭 禁用update服务,光这个不行,下边还有windows update medic service禁止流程 禁用windows update medic service 修 ...

  5. 计算机关闭更新配置win10,windows10取消自动更新怎么操作_win10怎样取消自动更新...

    相信许多用户已经把系统升至windows10系统了,那么使用windows10的用户应该都会遇到电脑自动更新的情况.电脑自动更新会使电脑变得卡顿,遇到这种情况我想应该让很多用户感到困惑,那么win10 ...

  6. win10系统更新在哪_Win10系统关闭自动更新方法

    Windows 10是微软最新的操作系统,系统上的自动更新功能可以保障Win10系统处于最新的状态,不过对于普通用户来说并不是所有的更新都是必要的,且系统频繁更新会比较影响用户正常使用.下面就和大家分 ...

  7. mysql unique 重复_Mysql中 unique列插入重复值该怎么解决呢

    当unique列在一个UNIQUE键上插入包含重复值的记录时,我们可以控制MySQL如何处理这种情况:使用IGNORE关键字或者ON DUPLICATE KEY UPDATE子句跳过INSERT.中断 ...

  8. mysql tomcat 自动重连_基于tomcat+mysql的c/s模式下的系统自动更新

    产品化的系统免不了要实现的就是系统的自动更新,下边讲讲我在工作中实现的win下的产品自动更新. 自动更新步骤: 1.本地系统版本与服务器最新版本比对. 2.发现更新版本后进行升级版下载. 3.关闭应用 ...

  9. mysql更新下载文件在哪儿_Windows自动更新所下载的文件存在什么地方

    展开全部 自动更新下载的文件位于 C:\Windows\SoftwareDistribution\Download文件夹中. 这些文件占用空间并不很大,不必清除,62616964757a6869646 ...

最新文章

  1. 解决apt-get /var/lib/dpkg/lock-frontend 问题
  2. boost::process:std_out相关的测试程序
  3. 《机器人编程实战》一一第1章 究竟什么是机器人
  4. Spring MVC –揭秘了@RequestBody和@ResponseBody
  5. linux 天文软件,新闻|开源新闻速递:天文软件 Stellarium 0.15.0 发布
  6. 信息学奥赛C++语言:社会实践任务
  7. 【iOS开发】更改App图标下方显示的名称
  8. java中包定义_java中包的定义与使用
  9. ]Vi/Vim查找替换使用方法
  10. JSLIU 的 wxWindows 入门
  11. 极速办公(ppt)如何插入超链接
  12. Android 自定义高德地图比例尺
  13. 计算机怎么快捷截图桌面,计算机屏幕截图快捷方式是获取屏幕截图的四种方法. 如何在笔记本电脑上截图?...
  14. WTL自绘界面库(QsImageMgrCtrlBase)
  15. LOG4J2-MDC-全链路跟踪等功能研究
  16. NOIP2016·洛谷·天天爱跑步
  17. 高斯牛顿法去畸变(C++实现)
  18. java循环输出abcd_java 输 abcd 输出其所有排列情况 permutate
  19. Linux命令——修改root密码
  20. 公司某应用服务器被挂挖矿病毒处理流程

热门文章

  1. 大数据江湖之即席查询与分析(上篇)--即席查询与分析的前世今生
  2. 孙俊 计算机技术资格水平考试,孙俊 - 专家学者 - - 计算机科学与技术 - 中南大学 - 学科服务平台...
  3. append html 是字符串,jquery .html()vs .append()
  4. Excel受保护的工作表怎么操作?
  5. 【信号源】脉冲发生器和数字码型发生器的区别
  6. 白话理解java多线程之setDaemon()方法
  7. 嵌入式Linux--U-Boot(三)Boot命令使用
  8. QQ2012 Beta1 (支持窗口合并、20人视频)
  9. docker(一) 安装与创建容器
  10. linux命令~iconv