这个问题是很偶然发生的。
我的数据库中,有一张表的数据维护错了,本来主键是从0递增的,且数列差值为1.但是到某个数,突然变成了2,于是,到后面一直都是错的,直到有一天才发现。
于是乎,我想把值改回去,于是写了一个sql,从错误的那个值开始都减一,没有发生问题。
但是,这个值是字典值,会被其他一些数据所引用,所以迫不得已需要改回来。
减一没发生问题,但是加一就发生问题了,提示主键重复。
于是两种办法:
一、每个主键xi都加上一个很大的数n,且xi+n不存在于主键中,然后xi - n + 1;
二、变更主键为另外一个不唯一的值,或者新增一个列值为uuid(),然后把原主键 xi = xi + 1,然后再把主键变回来。