2011-10-15 602 views
0

我有列的表格:自动增量列的MySQL

[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]

在此先感谢

+0

对于MySQL,你也许可以增加变量类似[这个答案](HTTP用户://计算器问题:7299400/interpolate-missing-values-in-a-mysql-table/7299650#7299650) –

回答

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 documentation,REPLACE重新插入(而不是只更新修改的字段)之前实际上将删除重复的行,这我是外键的存在的问题。

不确定SQLite的,但我猜你可以采用类似的总体思路

5

你可以这样做的更新:

UPDATE table SET public_id = id + 1049 

有了这个,你正在使用的ID,并添加1049给它得到你需要

+0

感谢您的快速回答,但id字段不是连续的=( – Addev

+2

它在您的示例中是连续的。只是一个不好的例子? –