在某mysql表中, 有xxx_type和xxx_id两个字段,且建立了联合唯一索引(需要这么做)。前者是int类型, 后者是string类型。
平时向表中插入数据, 都正常, 不会出现问题。
但上周六就蛋疼了, 每月执行一次的离线任务开始执行, 系统立即告警, 经查是(xxx_type, xxx_id)无法插入, 具体原因是: xxx_id为空, 导致(xxx_type, xxx_id)出现冲突, 这就尴尬了。 初步判断,必须在周末发布版本解决。
凡事就怕绝对,一定要在周六发版本吗? 不不不。
某哥最后用mysql的rand()函数临时搞定, 不用发版本。 具体做法是: 鉴于在离线任务场景下, xxx_id没有实际意义, 所以,在某xxx_type条件下,如果xxx_id为空,就在命令行上强行置为rand(), 这样离线任务可以继续插入空xxx_id了, 然后继续置为rand(), 如此搞几次, 等离线任务执行完毕, 也就都插入成功了, 幸好,数据量暂时很小。
临时解决了问题, 足够了。 长远的根本解决问题,还是需要发版本解决, 给xxx_id赋值。
不多说。