telephone 为空 唯一索引_记一次线上唯一索引失效没有起效的场景

背景描述:我们系统A做远程在线接口提供给B系统调用,每次的请求参数中都带有幂等单号用来做幂等校验,幂等单号对应的字段是不可空且唯一的。由于对应的业务表线上已有数据,这个幂等字段数据新加的字段,所以要做初始化数据,给每条记录设置一个幂等值进去。

第1次的方案:在入参进来的时候根据查询方案selectCount了此幂等号对应的数据记录,首先不说selectCount方法的性能(全表扫描),其次这种提前的查询不支持并发的情况,并发情况下,插入的数据对插入的数据不可见的,这样就不能报账幂等,数据的唯一性。(被狠狠的diss了一顿)

第2次的方案:由于上面的方法不保险不可行,必须在数据库给幂等字段加唯一索引,而唯一索引的字段不可空,加上之前新增的幂等字段设置的可空,蚂蚁数据库限制,不可将可空的字段设置为不可空,所以又得新加字段,设置不可空为幂等字段,然后再在这个幂等字段上加唯一索引,然后在插入数据时,先插入数据,如果插入异常,而且是唯一键异常,则捕获此异常,给接口返回true。貌似这样的方法在线下没错误,实则是凭了运气。后续将下面。(线上唯一索引又没生效,并发导致重复数据进来,直接被批了一顿,幸亏数据可以删除,数据量不大)。

第3次的方案:为何第2次的方案不可行呢?因为唯一索引执行时,有条件的。1、字段值不能为空 2、字段值不能重复。再加上以为有数据库兜底的校验机制,就将代码查询校验的给去掉了,结果唯一索引也没有生效,索引幂等形同虚设。这是一次惨痛的教训,被喷成shit了。

正确的做法:以代码提前查询(找一个效率高的查询,不要全表扫描,数据量过大会影响性能的),再加上必须生效的唯一索引。

唯一索引执行成功的方法步骤:

1、应该先加字段,

2、然后初始化不同的值到幂等字段,

3、然后再加唯一索引这样才会使得唯一索引生效。不能将表结构变更(添加字段和添加索引放在一起执行,这样的话唯一索引一定不成功)。

总结:这次反复在同一个问题犯错,想想原因:1、基础太差,并发不了解,数据库不了解唯一索引的用法 2、蚂蚁数据库线上和线下索引(两天才能生效)执行的不同 3、唯一索引执行生效的步骤不了解。

推荐学习:如何保证幂等 :https://mp.weixin.qq.com/s/yeYqeQMzI6hpkNPh9TWJWQ

高并发的核心技术-幂等的实现方案:https://mp.weixin.qq.com/s/aqlWMxnneFhSIFJBPMW25A

幂等设计:https://mp.weixin.qq.com/s/MULK4lEuksByZcjGq29-2Q

如何设计一个幂等接口:https://mp.weixin.qq.com/s/wDBAou-nmJ2fzr5CM7j_TA

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/564314.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机环境安全服务未启动,windows10系统卡在“准备安全选项”如何解决

最近有windows10系统用户到本站反映说遇到这样一个问题,就是计算机突然卡在“准备安全选项”屏幕上了,导致无法进行任何操作,该怎么办呢,下面小编就给大家讲解一下windows10系统卡在“准备安全选项”的具体解决方法。现在&#xf…

MySQL 对查询结果进行排序

MySQL SELECT 语句&#xff0c;ORDER BY 子句主要用来将结果集中的数据按照一定的顺序进行排序。 其语法格式为&#xff1a; ORDER BY {<列名> | <表达式> | <位置>} [ASC|DESC]语法说明如下。 1 列名 指定用于排序的列。可以指定多个列&#xff0c;列名之…

matlab实现双边滤波_【他山之石】pytorch 实现双边滤波

“他山之石&#xff0c;可以攻玉”&#xff0c;站在巨人的肩膀才能看得更高&#xff0c;走得更远。在科研的道路上&#xff0c;更需借助东风才能更快前行。为此&#xff0c;我们特别搜集整理了一些实用的代码链接&#xff0c;数据集&#xff0c;软件&#xff0c;编程技巧等&…

新网 云服务器,云服务器的使用教程

现在购买云服务器的人越来越多&#xff0c;大家只需要在众多的云服务器品牌中找到适合自己的云服务器。并不是价格越贵就越适合自己&#xff0c;而且初学者购买贵的云服务器并不划算&#xff0c;接下来就由小编为大家介绍关于云服务器的使用教程&#xff0c;希望能给大家带来帮…

MySQL 条件查询

MySQL SELECT&#xff0c;可以使用 WHERE 子句来指定查询条件&#xff0c;从 FROM 子句的中间结果中选取适当的数据行&#xff0c;达到数据过滤的效果。 语法格式如下&#xff1a; WHERE <查询条件> {<判定运算1>&#xff0c;<判定运算2>&#xff0c;…}其…

开红数显示服务器为空,网维大师常见问题:图标空白或红号问号

【问题现象】客户机打开游戏菜单后出现图标异常&#xff0c;只能看到游戏文字看不到图标或图标&#xff1f;号&#xff0c;分别如下图两种情况或【原因说明】出现这种问题一般是由于网维大师服务端的游戏图标缓存文件损坏导致。而导致图标缓存损坏的原因一般是由于&#xff1a;…

shell脚本给mysql创建表_shell脚本:实现MySQL创建数据库和删除数据库的脚本

OS操作系统&#xff1a;CentOS release 6.8 (Final)[rootsky9896chapter11]# vi createdatabase.sh #批量创建数据库#!/bin/shPATH"/var/lib/mysql/bin:$PATH"MYUSERrootMYPASS*******MYCMD"mysql -u$MYUSER -p$MYPASS "for dbname in test skyboy skygirl…

MySQL 常用运算符

MySQL 数据库中的表结构确立后&#xff0c;表中的数据代表的意义就已经确定。而通过 MySQL 运算符进行运算&#xff0c;就可以获取到表结构以外的另一种数据。 例如&#xff0c;学生表中存在一个 birth 字段&#xff0c;这个字段表示学生的出生年份。而运用 MySQL 的算术运算符…

mysql连接不上远程数据库_Mysql 连接不上远程数据库,求助

如题&#xff0c;放假在家玩树莓派集群&#xff0c;其中一台连不上数据库&#xff0c;今日怪事1状态描述&#xff1a;平台树莓派 4B&#xff0c;架构 armv7&#xff0c;系统 raspbian 最新( debian10 )数据库版本 mariadb-server version: 10.3.22安装 mariadb-server & cl…

dicom虚拟打印服务器,DICOM打印服务器软件

dicom打印服务器|dicom相机|PrintSCP|dicom胶片打印服务器|与多家PACS产品对接通过dicom胶片打印服务器(PrintSCP)&#xff0c;接收放射设备(CT、ECT、CR、DR、MRI、DSA等)或PACS工作站的“胶片打印”指令&#xff0c;将胶片打印到Windows打印机&#xff0c;从而替代常规的激光…

MySQL 内连接查询

MySQL FROM 子句中使用关键字 INNER JOIN 连接两张表&#xff0c;并使用 ON 子句来设置连接条件。如果没有任何条件&#xff0c;INNER JOIN 和 CROSS JOIN 在语法上是等同的&#xff0c;两者可以互换。 语法格式如下&#xff1a; SELECT <列名1&#xff0c;列名2 …> F…

如何进入embl的ebi网站fasta3服务器,The EMBL-EBI bioinformatics web and programmatic tools framework...

摘要&#xff1a;Since 2009 the EMBL-EBI Job Dispatcher framework has provided free access to a range of mainstream sequence analysis applications. These include sequence similarity search services (https://www.ebi.ac.uk/Tools/sss/) such as BLAST, FASTA and…

mysql 时间 设计模式_数据库时间设计模式

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里云数据库专家保驾护航&#xff0c;为用户…

超微服务器开机启动项目怎么设置,超微服务器启动项设置

超微服务器启动项设置 内容精选换一换微服务部署完后&#xff0c;您可以根据微服务的运行情况进行微服务的治理。您可以先在“服务目录 > 微服务列表”中创建微服务&#xff0c;启动微服务后&#xff0c;根据yaml文件的配置&#xff0c;会在对应的服务下注册服务实例。如果没…

MySQL 外连接查询

MySQL 中内连接是在交叉连接的结果集上返回满足条件的记录&#xff1b;而外连接先将连接的表分为基表和参考表&#xff0c;再以基表为依据返回满足和不满足条件的记录。 外连接更加注重两张表之间的关系。按照连接表的顺序&#xff0c;可以分为左外连接和右外连接。 左外连接…

mono for android mysql_mono for android 自定义titleBar Actionbar 顶部导航栏 修改 样式 学习...

以前的我是没有做笔记的习惯的&#xff0c;学习了后觉得自己能记住&#xff0c;但是最近发现很多学的东西都忘记了&#xff0c;所有现在一有新的知识&#xff0c;就记下来吧。最近又做一个mono for android 的项目 这次调整比较大&#xff0c;上次做的点餐系统很好用 &#xff…

mysql srid_mysql8 参考手册--索引优化

主键优化表的主键表示您在最重要的查询中使用的一列或一组列。它具有关联的索引&#xff0c;可提高查询性能。查询性能可以从NOT NULL优化中受益&#xff0c;因为它不能包含任何NULL值。使用InnoDB存储引擎&#xff0c;可以对表数据进行物理组织&#xff0c;以根据一个或多个主…

MySQL 分组查询

MySQL SELECT 语句&#xff0c;允许使用 GROUP BY 子句&#xff0c;将结果集中的数据行根据选择列的值进行逻辑分组&#xff0c;以便能汇总表内容的子集&#xff0c;实现对每个组而不是对整个结果集进行整合。 语法格式如下&#xff1a; GROUP BY { <列名> | <表达式…

MySQL 指定过滤条件

MySQL SELECT 语句&#xff0c;除了能使用 GROUP BY 子句分组数据外&#xff0c;还可以使用 HAVING 子句过滤分组&#xff0c;在结果集中规定了包含哪些分组和排除哪些分组。 语法格式如下&#xff1a; HAVING <条件>其中&#xff0c;<条件>指的是指定的过滤条件…

mysql 终端 远程访问,通过终端连接到远程mysql

For a test I set up user mysql user with % access. When I try to connect from a remote machine I get:Enter password:Then immediately get this:ERROR 2003 (HY000): Can’t connect to MySQL server on ‘xxxxxxx’ (1)Any ideas解决方案Try to comment the bind-addr…