2009-08-06 85 views

回答

0

你想要AUTO_INCREMENT

雖然讓它在99999重置可能是一個問題。我也會質疑你的要求,它的工作方式。

+0

我不認爲有重置'auto_increment'的方法,除非您刪除行,截斷表或重新創建列。 – Eric 2009-08-06 12:23:07

0

如果您需要重置,你可以創建一個觸發器:

create trigger auto_number before insert on `sometable` 
begin 
    new.autoid = coalesce((select max(autoid)+1 from sometable),0) % 1000000 
end 

從本質上講,當一個insert發生,這只是設置autoid列作爲一個最大的ID。但是,它使用模數來確保數字重複爲1,000,000。

+0

這不起作用。你會打最大自動,然後max(自動)將成爲一個常數。所以你會重複生成相同的ID。更不用說最好有一個很好的索引,否則這將是/慢/。 – derobert 2009-08-07 04:21:44

+0

@derobert:....這就是OP要求的。 0至99999,然後再重複一遍。 – Eric 2009-08-07 09:48:10

1

選擇數據(或通過視圖)時生成一個不斷遞增的數字(例如,標準的auto_increment),然後,通過MOD 100000運行它:

⋮ 
99998 % 100000 = 99998 
99999 % 100000 = 99999 
100000 % 100000 = 0 
100001 % 100000 = 1 
⋮ 

可以通過創建使這種透明對於選擇一個觀點:

CREATE SQL SECURITY INVOKER VIEW whatever AS 
    SELECT 
    foo, bar, baz, autoid % 100000 AS autoid, taz 
    FROM base_table; 

不幸的是,這種觀點可能不會更新和MySQL不支持INSTEAD OF觸發,所以你必須發送寫入基礎表。

+0

你認爲如果我讓php這樣做會更好嗎? – EddyR 2009-08-07 05:11:39

+0

@EddyR:不知道讓PHP做這件事會更好嗎?你還沒有描述*爲什麼*你想這樣做。 – derobert 2009-08-08 05:28:13