小编典典

手动自动递增一列MySQL

sql

我有一个带有列的表:

[id,name,public_id]

该表实际上包含

[1,john,0]
[2,sara,0]
[3,jack,0]
.....

我想将第三列更改为1050,1051,1052 ....

[1,john,1050]
[2,sara,1051]
[3,jack,1052]
.....

我该如何进行更新?

一些注意事项:公共ID必须超过1049,并且必须是连续的。例如,对于100行,public_id必须为[1050 .... 1149]

提前致谢


阅读 163

收藏
2021-04-15

共1个答案

小编典典

假设表的名称为TEST_TABLE,此MySQL语法将使用从1500开始的连续值(并按ID的顺序)更新PUBLIC_ID:

REPLACE INTO TEST_TABLE
SELECT TEST_TABLE.ID, TEST_TABLE.NAME, @ROWNUM := @ROWNUM + 1
FROM
    TEST_TABLE,
    (SELECT @rownum := 1499) R
ORDER BY ID

简而言之:

  • 对于每一行,请找出按ID对数据进行排序时的顺序。将此订单称为“ ROWNUM”。
  • 将ROWNUM(+起始偏移量)放回表中,而不是原始的PUBLIC_ID。

警告:根据MySQL文档,REPLACE实际上会在再次插入重复行之前删除重复的行(而不是仅更新已修改的字段),在存在外键的情况下,这可能是一个问题。

不确定SQLite,但我猜您可以采用类似的一般思路。

2021-04-15