程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了MySQL INSERT…ON重复更新-向自动增量添加1大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决MySQL INSERT…ON重复更新-向自动增量添加1?

开发过程中遇到MySQL INSERT…ON重复更新-向自动增量添加1的问题如何解决?下面主要结合日常开发的经验,给出你关于MySQL INSERT…ON重复更新-向自动增量添加1的解决方法建议,希望对你解决MySQL INSERT…ON重复更新-向自动增量添加1有所启发或帮助;

INSERT ... ON DUPliCATE KEY UPDATE为了InnoDB的auto_INCREMENT处理目的,它被称为“混合模式插入” 。基本上,混合模式插入是已知所需值的 最大 数量的插入auto_INCREMENT,但 实际上所需的 数量不是。

混合模式插入默认情况下会特别处理,如MySQL docs中所述:

如果您使用的是InnoDB,则可以选择:

  1. 避免INSERT ... ON DUPliCATE KEY UPDATE
  2. 对于“传统”自动增量锁定模式,请将innodb_autoinc_lock_mode参数设置为0,以确保所有INSERT语句将为auto_INCREMENT列分配连续的值。但是,这是通过在语句期间锁定来完成的,因此,此设置会导致性能下降。
  3. (推荐)忽略auto_INCREMENT列中的间隙。

注意:auto_INCREMENT在MyISAM下,处理方式完全不同,这不会表现出此行为。

解决方法

我通过一个简单的计数器来跟踪访问我的所有http_user_agents。下面在数据库中插入http_user_agent,此字段不区分大小写,并且是唯一的。因此,当我们尝试将其插入并找到一个DUPLICATE
KEY时,会将1加到hits字段。

问题是即使我们没有插入字段,我的“自动增量”字段仍会增加。我该如何预防呢?

$sql = "INSERT INTO `db_agency_cloud`.`tblRefHttpUsersAgent` SET `http_users_agent` = :UsersAgent,`created_ts` = NOW() ON DUPLICATE KEY UPDATE `hits` = `hits` + 1";

这是表格结构:

CREATE TABLE `tblRefHttpUsersAgent`
(
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,`http_users_agent` varchar(255) NOT NULL,`hits` int(20) unsigned NOT NULL DEFAULT '1',`created_ts` datetime NOT NULL,`activity_ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,PRIMARY KEY (`id`),UNIQUE KEY `http_users_agent` (`http_users_agent`)
)
ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;

大佬总结

以上是大佬教程为你收集整理的MySQL INSERT…ON重复更新-向自动增量添加1全部内容,希望文章能够帮你解决MySQL INSERT…ON重复更新-向自动增量添加1所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: