最简单的方法是双重的:将所有内容插入目标表后,进行 2 次更新。
首先,您检查表中的最大数字是多少,然后将其加一并记住它作为 topnumber。
然后,将所有内容更新为递增数字,从 topnumber 开始。最后,您更新所有内容,从初始种子开始,每条记录递增 1。
number data
1 "foo"
3 "bar"
10 "snafu"
topnumber 变为 11
第一次通过后,数据如下所示:
number data
11 "foo"
12 "bar"
13 "snafu"
第二遍之后(假设您的初始数字是 7),数据如下所示:
number data
7 "foo"
8 "bar"
9 "snafu"
更新
或者,您可以在第一次通过时将记住的最高数字添加到每个初始值,而不是将数字更新为增量值(因此上述示例表在第一次更新后将如下所示:
number data
11 "foo"
13 "bar"
23 "snafu"
),并且在第二次通过时,您会将所有数字减去先前存储的顶部数字并将它们增加 1,对于我们的示例,这将导致以下结果:
number data
2 "foo"
4 "bar"
11 "snafu"
使用代码片段中的名称,整个脚本可能如下所示:
/* remember the top ID */
SET @max_id = (SELECT MAX(ID) FROM tapp);
/* increment by the top ID */
UPDATE tapp SET id_App = id_App + @max_id;
/* decrement by the top ID and increment by 1 */
UPDATE tapp SET id_App = id_App - @max_id + 1;