2013-02-02 29 views
0

後設置自動遞增值我有一個表如何刪除中間行

id paper_title 
1 General English1 
2 General English2 
3 General English3 
4 General English4 
5 General English5 
6 General English6 
7 General English7 
. 
. 
. 
. 
100 General English100. 

想,如果我刪除4行和第5行,是可以更新一般English6和一般English7集的ID 4,5分別和如果我刪除中間行或開始ID應連續重置像1 2 3 4 5 .................. 100.請幫助。

+0

爲什麼不添加is_deleted字段,並在「刪除」它時將其設置爲「T」?而不必循環遍歷刪除行後面的所有行並編輯它們。 – Minja

回答

1

確定您想要刪除的行的id(我們稱之爲ID $foo)。然後執行

UPDATE tbl SET id = id-1 WHERE id > $foo 

獲得最高id並調用它$max

SELECT MAX(id) FROM tbl 

然後設置新的自動遞增值:

ALTER TABLE tbl AUTO_INCREMENT = $max+1 

爲你做這個刪除的每一行。我當然希望id不是你的主要關鍵。無論如何,肯定有更好的解決方案來解決您的潛在問題。通常不需要將數據庫表中的行編號從1到任何沒有間隙的行。

+0

+爲「我當然希望身份證不是你的主要關鍵。」 –

+0

對不起,我忘了指定id是主鍵NOT NULL AUTO_INCREMENT.Please建議我一種方法來解決上述問題 – user1950655

+1

主鍵應該是[不可變](http://programmers.stackexchange.com/questions/8187/should -a-主鍵待不可變的)。主鍵的唯一目的通常是爲了唯一識別記錄。爲此,他們不需要連續。主鍵通常不是來自業務領域,因此不需要執行任何其他的約束而不是表格中唯一的約束。這些主鍵稱爲[代理鍵](http://en.wikipedia.org/wiki/Surrogate_key)。我強烈建議熟悉這個概念。 – Oswald