2013-06-28 51 views
0

例如,有一個表中的幾個項目mysql的設置一個項目ID爲AUTO_INCREMENT最大ID

id |name|info 
1 |Jim |Male 
2 |Rob |Male 

表的ID是auto_increment的,現在我想更新吉姆的行的底部搶,並得到最新的ID,又名

id |name|info 
2 |Rob |Male 
3 |Jim |Male 

並獲得(3)的ID,什麼是SQL表達式?

+5

這聽起來就好像你要使用該id用於某種目的,而不僅僅是識別record_,就像排序。不要這樣做。這不是一個ID的工作。 – CBroe

回答

4

由於您無法在同一更新查詢中選擇max(id),因此您必須將max(id)定義爲變量。查詢您需要:

SET @max = (SELECT max(`id`) FROM `table` FOR UPDATE); 
UPDATE `table` SET `id` = @max+1 WHERE `name` = "Jim"; 

編輯:你是不是應該更新的ID,因爲它是一個唯一的標識符。如果你想使用排序方法,你應該添加一個整數列「位置」。

+2

您可能想要爲第一個查詢添加「FOR UPDATE」。以防有人在更新之前偷偷進入並插入另一條記錄。除非你真的需要,否則不要惹自動增量,它會在稍後咬你。 – Vatev

+0

@Vatev:當然!我沒有專注於安全目的,但我編輯我的答案包括它。 – Edgar

+0

該行是auto_increment,並且在我更新了id之後,我如何讓auto_increment繼續前進?否則在我插入一個新的id後將會重複該id。 – yudun1989

1

沒有更新自動增量列,你可以刪除吉姆的行,然後重新插入,這將是ID = 3

DELETE FROM `table` where id = 1 

然後

INSERT INTO `table` (name , info) VALUES ('jim' , 'male') 
相關問題