2011-01-10 33 views

回答

0

MySQL不支持這種ID的自動生成。僅支持整數auto_increment標識。

您可以使用觸發器來做到這一點,但如果同時執行多個插入操作,它將不可靠。

最後但並非最不重要的是,由於性能原因,應避免主鍵的字符串列(特別是在InnoDB表中)。

0

使用標準的AUTO_INCREMENT字段在MySQL中簡單地生成ID的數字部分可能是一個好主意,然後在PHP中簡單地在輸出中添加「Ref」組件。

作爲一個建議,你可能想要創建一個單一的規範函數(「makeRef」或類似的),這樣這個活動只能通過一個函數來完成,因此在將來如果修改很容易,如此需要。

就MySQL而言,您可能還想使用ZEROFILL選項來將數值填充到一定的長度,儘管我個人幾乎要在上面的「makeRef」函數中使用PHP的str_pad函數來處理這個問題。用於pad_type參數的STR_PAD_LEFT選項。

1

寫作是否將來有人需要這種功能。我用php來生成這個值。非常簡單:

$q="select reference_number from accounts order by reference_number desc LIMIT 1"; 
$result = mysql_query($q); 
$row = mysql_fetch_assoc($result); 

$new_eps=explode('REF',$row['reference_number']); //get existing highest value from DB 
$new_eps=$new_eps[1]+1; // increment by one 
$eps_string="REF"; 
$length = 8 - strlen($new_eps); //I need 8 digits for my REF number 
    for($i=0;$i<$length; $i++){ 
    $eps_string .='0'; 
    } 
    $eps_string =$eps_string.$new_eps; 

就是這樣!

+0

如果以不正確的順序從數組中返回數字(例如:8,7,6,5,4,400,400,3,2,1),請將「order by reference_number desc」部分替換爲「by cast by order(replace(reference ,'REF','')爲無符號)desc「 – 2013-04-12 05:43:28

相關問題