MySQL建立唯一索引实现插入重复自动更新

作者:小谈博客 时间:2024-01-12 13:46:36 

前言

在我们往数据库插入数据的时候,需要判断某个字段是否存在,如果存在则执行更新操作,如果不存在则执行插入操作,如果每次首先查询一次判断是否存在,再执行插入或者更新操作,就十分不方便。下面给大家分享个方法,方便大家实现这一功能,下面来一起看看吧。

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 进行判断,如果存在则更新,不存在就新增。

MySQL建立唯一索引实现插入重复自动更新

这个时候 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,索引,重复,更新
0
投稿

猜你喜欢

  • js 兼容多浏览器的回车和鼠标焦点事件代码(IE6/7/8,firefox,chrome)

    2024-04-23 09:24:07
  • Python实现压缩与解压gzip大文件的方法

    2021-10-13 19:39:41
  • JS 函数的 call、apply 及 bind 超详细方法

    2024-04-30 10:42:28
  • pyinstaller打包单个exe后无法执行错误的解决方法

    2023-08-08 09:50:26
  • python二叉树常用算法总结

    2023-01-15 01:35:18
  • Python tkinter padx参数详解

    2022-03-12 06:09:50
  • Pandas数据集的分块读取的实现

    2021-02-03 07:52:24
  • 详解Java正则表达式中Pattern类和Matcher类

    2023-07-11 22:30:22
  • pandas分别写入excel的不同sheet方法

    2022-08-27 04:15:03
  • 网友分享:Oracle数据库开发技术经验浅谈

    2009-04-22 13:11:00
  • python基于xml parse实现解析cdatasection数据

    2023-08-18 13:27:36
  • Qt数据库应用之实现通用数据生成器

    2024-01-16 00:37:49
  • js+php实现静态页面实时调用用户登陆状态的方法

    2023-10-09 22:32:45
  • Python通过psd-tools解析PSD文件

    2023-05-25 12:08:47
  • spring学习JdbcTemplate数据库事务管理

    2024-01-28 10:46:13
  • Python使用openpyxl读写excel文件的方法

    2021-02-06 07:24:37
  • Python真题案例之二分法查找详解

    2023-09-23 01:39:07
  • Django框架中方法的访问和查找

    2022-07-23 16:31:35
  • 解析PHP中empty is_null和isset的测试

    2023-11-18 17:39:06
  • 谦逊编程(翻译整理)

    2009-07-28 12:52:00
  • asp之家 网络编程 m.aspxhome.com