mysql insert操作失败后id 在auto_increment下仍会自增的解决办法

在使用golang go-sql-driver操作mysql时,往tag表插入一条新数据时,如果插入失败,id仍会自增,插入数据失败次数过多时,id就看起来十分混乱。
所以我就在搜索下原因,发现是InnoDB的机制,大致就是说InnoDB的innodb_autoinc_lock_mode模式下,自增计数器在操作失败的情况下仍会增加。一般情况下如果担心id增加超过范围,可以把id的类型改为BIGINT。

create table tag
(
    id     int auto_increment primary key,
    gender int         null,
    name   varchar(50) null,
    constraint tag_name_gender_uindex
        unique (name, gender)
)ENGINE=InnoDB;

插入一条记录

常规写法:

insert ignore into tag (name,gender) values ('anime',2);

ignore 是为了插入失败时不报错。
修改的写法:

insert ignore into tag (name,gender)
select * from (SELECT 'anime',2) AS tmp
where not exists (
    select * from tag where name='anime' AND gender=2
);

参考文章:

原文地址:https://www.cnblogs.com/waterserver/p/12236049.html

时间: 2024-10-20 21:47:01

mysql insert操作失败后id 在auto_increment下仍会自增的解决办法的相关文章

关于mysql数据库在输入密码后,滴的一声直接退出界面的解决办法(详细办法)

前一阵子,由于写程序要用到数据库,便在本子上下载了一个,却出现很多小问题(自己的台式机却没有该问题,可能是本人的本子太渣了吧),纠结了好一阵,回头想想,发现问题,分析问题,解决问题,不就是我们的软件管理的思想嘛,只有经历过问题,才能深刻理解.废话不多说了,直接上题. 下载好mysql后,当你打开mysql的字符界面时(MySQL 5.5 Command Line Client),输入密码(在安装时,向导里手动设置好的).出现滴的一声的,然后一闪屏就结束了,我的电脑前一段时间,装了个mysql 5

MySQL 警告WARN: Establishing SSL connection without server's identity verification is not recommended.解决办法

Success loading Mysql Driver!Mon Apr 04 15:43:00 CST 2016 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by d

MySQL出现 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) 解决办法

进入cmd 输入 mysql -u root -p 出现ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) 找到安装mysql的根目录打开 my.ini文件 添加一条语句 skip-grant-tables 保存后退出 进入cmd 输入net stop mysql; 停止mysql  然后在开启 net start mysql;  这步是修改完文件后重启一下 然后在 输入 mysq

iOS自定义tabbar后popToRootViewContriller和poptoviewcontroller时出现两个tabbar 的解决办法

iOS自定义tabbar后popToRootViewContriller和poptoviewcontroller时出现两个tabbar  的解决办法 问题:iOS自定义tabbar后popToRootViewContriller和poptoviewcontroller时出现两个tabbar 1.自定义代码: - (void)viewWillAppear:(BOOL)animated { [super  viewWillAppear:animated]; // 删除系统自动生成的UITabBarB

dede修改templets模板文件夹后,出现“无法在这个位置找到: ”错误的解决办法

修改templets模板文件夹的方法: 首先找到系统配置文件common.inc.php,此文件存放在Include目录下,打开common.inc.php来修改默认模板目录templets, 查找:$cfg_templets_dir = $cfg_cmspath.'/templets'; 将上面的红色部分修改为想要的文件夹名称,例如:xinfu800.com_moban,修改完之后需要手动将Templets重命名为:xinfu800.com_moban.上述所说的方法还可以修改插件目录.会员目

检索 COM 类工厂中 CLSID 为 {96749377-3391-11D2-9EE3-00C04F797396} 的组件失败,异常0x80040154,没有注册类问题分析和解决办法

问题分析和解决 //阅读函数 private void Read(string text) { SpVoice sp = new SpVoice();//报错位置 sp.Rate = GetSpeedSelected(); SpeechVoiceSpeakFlags sFlags = SpeechVoiceSpeakFlags.SVSFlagsAsync; sp.Speak(text, sFlags); } 报错信息: 有关调用实时(JIT)调试而不是此对话框的详细信息, 请参见此消息的结尾.

安装软件后浏览器主页被篡改,弹广告和游戏的解决办法

删除弹广告和游戏的:(因为还有做过别的操作,不确定是否有效) 1.打开注册表编辑器,找到HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon这一个主键,在右边窗口中找到“LegalNoticeCaption”和“LegalNoticeText”这两个字符串,删除这两个字符串.重启. 2.电脑管家中的操作:(针对进行过常规操作扫描杀毒后仍旧无效时) 进入设置中心 --->选择“杀毒”模块,点击右边的“进入信

当node升级后导致webpack打包出错,node-saas出问题的解决办法

报错信息如下: ERROR in ./node_modules/[email protected]@extract-text-webpack-plugin/dist/loader.js?{"omit":1,"remove":true}!D:/work/nl_web/node_modules/[email protected]@vue-style-loader!D:/work/nl_web/node_modules/[email protected]@css-load

mysql调用存储过程的时候,报错ERROR 1436 (HY000): Thread stack overrun: 解决办法

mysql> call productpricing();ERROR 1436 (HY000): Thread stack overrun: 10368 bytes used of a 131072 byte stack, and 128000 bytes needed. Use 'mysqld --thread_stack=#' to specify a bigger stack. 解决办法: vim /etc/my.cnfthread_stack = 128K ##原来为128,根据报错提示