2012-03-13 101 views
0

作爲我們正在制定的管理應用程序的一部分,我試圖優化儘可能多的PHP和MySQL代碼,但我有一個擔心...如何在MySQL表中創建嵌套的AUTO_INCREMENT字段?

實際上,我們的數據方案用於存儲客戶端訂單如下:

year -> DATE 
order_id -> INT(11) 
order_line_id -> INT(11) 

我們基本上做的是每年重置ORDER_ID領域(法律,併爲問責制的目的,您可以重置您的ID或只是讓他們成長,雖然客戶經理通常傾向於第一種什麼選項而不是第二個選項),對於訂單行ID也是如此,因此每個訂單都會爲每個連續訂單重置其行ID。

但是,所有這些都是手工完成的。這非常不理想,我希望通過適當的方式來實現,這將使過程自動化,並將重置控制交給MySQL。

但問題是......怎麼樣?我該如何告訴MySQL自動重設的AUTO_INCREMENT領域order_line_id每個新ORDER_ID和自動重設的AUTO_INCREMENT領域ORDER_ID每個新

+1

autoincrement是主鍵...在你的情況下,order_id不能作爲客戶指定信息的PK,也沒有任何關於你的數據庫模式的完整性。 – Rufinus 2012-03-13 11:52:25

回答

1

很好,只要我知道,在mysql中,你只能對primary_key auto_increment的,否則你必須插入/更新現場時manualy設置這些值,但是這不是太大的問題。

你也可以在mysql的兩列上有鍵值,所以你可能在(order_id,year)上有一個帶有auto_increment的primary_key。

否則ORDER_ID,例如,將通過在那裏你搜索最大(ORDER_ID),其中今年一子查詢插入時設置= THIS_YEAR

0

你可以設置只有一個自動增量。 但是你可以設置BEFORE INSERT觸發器來根據序列更新列。

在mysql中沒有序列實體,所以你自己做。

容易的方法是把第一行manualy,創建與順序列索引,並使用

select order_id+1 into new_order_id 
     from your_table_name order by order_id desc limit 1 

注意到,這不是100%正確的方法。它會再次給出相同的order_id,如果你刪除了第一個。

要獲得100%的有效序列,您必須創建表並手動管理它。