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