我正在研究一个Java项目,该项目需要能够改变表中的所有主键 - 在大多数情况下 - 也可以改变行中的其他一些值。 我遇到的问题是,如果我通过选择旧的主键来更新行(SET pk = new_pk WHERE pk = old_pk),我会得到重复的行(因为旧的PK值可能等于另一行的新行)然后更新PK值和两行。
我认为在Oracle和其他一些数据库中我可以用ROWNUM或类似的东西来做这件事,但是系统应该适用于大多数数据库系统,而现在我们无法让它适用于MySQL。
我应该补充一点,我无权更改数据库的架构 - 因此,我无法添加列。
我尝试过:
PS: 我意识到这听起来像是一个糟糕的想法,或者是糟糕的设计,但我们别无选择。我正在研究的系统旨在匿名私有数据,这可能需要在某些表中更改PK。不要害怕,我们会考虑FK参考。
答案 0 :(得分:0)
在这种情况下,您可以使用简化更新,其中delta = max Pk来自更新表
选择delta
select max(pk) as delta from table
然后在查询中使用它
update table SET pk=pk+delta+1
在此操作之前,您需要禁用约束。并且不要忘记你也应该更新外键。