记录一次更版数据库表结构发生变化导致的线上问题
记录一次更版数据库表结构发生变化导致的线上问题
前言
问题发生的场景是这样的,已上线项目的数据库表结构在二期需求中发生了变化,并且二期需求部分功能依赖于新增的表字段,导致系统运行时,出现数据的不一致。
数据出现不一致的原因是这样的,二期需求对表提出新的要求,要求表中存在唯一索引key,而且后面对表数据的获取也是通过这个唯一索引key来进行。测试时,发现原先的表中存在的数据的key值为null,并且无法保证其唯一性,并且无法获取(通过key获取)。
问题分析
问题其实就出现在依赖了新增字段上,并且旧的表对于该字段并没有设置值。
解决方案
解决方案是对表进行数据的迁移,写个sql脚本,将原先的表的数据进行提取,在按照新的规则插入到新表中,key值得到设置,唯一性得到保证。但是仍然存在问题,就是系统版本更新和数据库更新时机不同带来的不一致的问题。数据库更新后,在系统更新前,数据库仍然会被写入不一致的数据。
讨论决定删除key唯一索引,使用组成key的字段组成联合索引,这样就能保证老系统运行时不会损伤新的数据库数据。
总结
在为表结构添加新字段时,要考虑到新字段会不会在系统更新中带来业务问题或者不一致的问题。通常是不一致的问题,也就是在要求唯一的数据记录出现了冗余的情况。
This post is licensed under CC BY 4.0 by the author.