2011-10-15 261 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

它在您的示例中是連續的。只是一個不好的例子? –