insert into on duplicate key update
问题
有一个表,建表语句如下:
CREATE TABLE `tbl_host` (`id` bigint(64) NOT NULL AUTO_INCREMENT,`ip` varchar(255) NOT NULL DEFAULT '',`host_name` varchar(2555) NOT NULL DEFAULT '',
`timestamp` int(11) NOT NULL DEFAULT '0',PRIMARY KEY (`id`),UNIQUE KEY `idx_ip` (`ip`)
) ENGINE=InnoDB AUTO_INCREMENT=84689426 DEFAULT CHARSET=utf8;
其中,
- id为主键,自增字段
- ip字段为唯一键
插入和更新表时使用sql语句:
insert into tbl_host(ip, host_name, timestamp) values ('%s', '%s', '%d') on duplicate key update host_name='%s', timestamp='%d'
当频繁update表记录时,通过
mysql> show create table tbl_host
发现AUTO_INCREMENT在不断增加。开始疑惑所使用的sql语句是不是有问题。
mysql官网给出说明:
With an auto-increment column, an INSERT statement increases the auto-increment value but UPDATE does not.
具体到INSERT ON DUPLICATE KEY UPDATE,即使最终执行了 update,自增ID也是会增长的。
如果id持续增长,会不会越界呢?对于int64数据类型,每分钟10w条记录更新,1亿年都消耗不完。所以,对于越界问题,可以放心使用。
建议
当遇到对表的操作是insert少, 需要大量update的情况,不建议使用insert into on duplicate key update。那如何处理情况呢?
- 可以首先select,如果查到则update,否则insert。
- 或者可以首先update,如果不存在,再insert。由于insert插入操作量少,大部分都是update,因此效率相对于前一种更好。具体代码可参考Go sql insert update使用举例
参考
mysql官网
https://dev.mysql.com/doc/refman/8.0/en/insert-on-duplicate.html
statckoverflow
https://stackoverflow.com/questions/23516958/on-duplicate-key-auto-increment-issue-mysql
mysql的AUTO_INCREMENT如果达到最大值会怎样呢?
https://blog.csdn.net/stpeace/article/details/78066262
insert into on duplicate key update相关推荐
- mysql批量insert bug_MySQL Bug insert into on duplicate key update 语法更新 text blob 大字段导致 MySQL crash...
1. 背景 业务执行 SQL 导致 MySQL 进程 Crash,做故障切换后,新的主库又 Crash 了.查看 MySQL 错误日志,发现多次 Crash 时的堆栈相同,如下: Thread poi ...
- mysql 中 replace into 与 insert into on duplicate key update 的使用和不同点
replace into和insert into on duplicate key update都是为了解决我们平时的一个问题 就是如果数据库中存在了该条记录,就更新记录中的数据,没有,则添加记录. ...
- mysql批量更新,批量插入之replace语句/insert into... on duplicate key update语句
mysql批量更新/插入数据有以下方法,使用这些方法批量插入数据/更新数据的时候就不用在代码层次增加判断数据是否已存在的逻辑了. 1:replace语句 2: insert into... on du ...
- [原] insert into … on duplicate key update / replace into 多行数据
场景是这样的,我有KV型的表,建表语句如下: CREATE TABLE `dkv` (`k1` int(11) NOT NULL DEFAULT '0',`k2` int(11) NOT NULL D ...
- MySQL插入语句insert into,insert ignore into,insert into ... on duplicate key update,replace into-解决唯一键约束
文章目录 常用插入语句 insert into insert ignore into insert into ... on duplicate key update replace into 使用场景 ...
- mysql使用INSERT INTO ON DUPLICATE KEY UPDATE导致dead lock分析和解决
一.事件回放 2019年1月的几天时间里每天会收到1次或者2次死锁的短信告警,死锁日志如下图. 二.检查业务场景和程序处理流程 用户打赏礼物请求处理,涉及到用户余额表和佣金账户表,以下所有操作在一个事 ...
- mysql insert into on_MySQL之INSERT INTO ON DUPLICATE KEY UPDATE用法详解 | 夕辞
MySQL数据库使用中如果主键或唯一键冲突,会报错,因此我们会用到insert into on duplicate key update语法,但是该语法具体怎么用以及返回什么值,今天就来讨论下. 首先 ...
- (转载)[MySQL技巧]INSERT INTO… ON DUPLICATE KEY UPDATE
(转载)http://blog.zol.com.cn/2299/article_2298921.html MySQL 自4.1版以后开始支持INSERT - ON DUPLICATE KEY UPDA ...
- MySQL INSERT INTO...ON DUPLICATE KEY UPDATE的使用
2019独角兽企业重金招聘Python工程师标准>>> 1. 语法规则为: INSERT [INTO] tbl_name[(col_name,...)]{VALUES} ({expr ...
- MySQL的INSERT INTO··· ON DUPLICATE KEY UPDATE使用的几种情况
保存或更新 在MySQL数据库中,如果在insert语句后面带上ON DUPLICATE KEY UPDATE 子句,而要插入的行与表中现有记录的惟一索引或主键中产生重复值,那么就会发生旧行的更新:如 ...
最新文章
- linux hosts文件如何修改_如何修改hosts文件?让你简单方便快捷管理
- Spring可扩展Schema标签
- 详解虚函数的实现过程之单继承(2)
- jdbc mysql 换行符_mysql JDBC URL格式各个参数详解
- 云栖大会特享,热营抢先开,阿里云专家的私教课,限时抢报!
- C# 对象名无效 问题
- ActiveMQ相关存储介绍
- 十招搞定 MySQL 大规模数据库的性能和伸缩性优化
- Android studio Error occurred during initialization of VM 问题解决
- Spring Cloud各组件总结归纳
- d3d11 indirect lighting
- 软件工程(英文版 第8版)
- 惠普HP CQ40 519TX XP系统安装以及XP驱动
- 光学图像、SAR图像等区别
- 用arcgis批量裁剪栅格(tiff)数据的矩形区域
- python遍历字母_如何遍历字母表?
- Game boy模拟器(3):GPU的时序
- Android 仿微信回复评论点赞效果
- python 删除pdf页面_Python脚本使用pyPDF删除空白页面
- iPhone与小米的体验对比(一)
热门文章
- 【Web开发】Python实现Web图表功能(D-Tale入门)
- 【论文精读】Stable Linear Structures and Seam Measurements for Parallax Image Stitching
- 零基础学python知乎-知乎:参与量化投资实训营是一种怎样的体验?
- ARM9开发之学习过程总结
- 第二章 确定性知识系统
- “2019年中国新型城镇化论坛”在京举行
- 谷歌是如何跌下神坛的?
- 微云php解析源码,微云网盘外链php源码 - 兼容并蓄 - 零零星星 - php - 外链 - 微云 - 源码 - HHTjim'S 部落格...
- saltstack数据返回和模块定义
- 计算机绘画小房子教案,小班美术教案小房子