2012-06-10 41 views
0

多列鍵我有具有化合物主鍵(id_a, id_b)的數據庫表。這不是他們實際叫到的,但我正在簡化這個問題。 id_a是一個外鍵和id_b僅僅是一個整數,「序列號」可以這麼說。我不能只是讓id_b auto_incrementing,因爲它不允許InnoDB存儲引擎(因爲它不是複合鍵中的第一個字段)。與SQLAlchemy的

我想使它使這些對象可以「分組」與id_a,因此,例如:

id_a id_b 
---------------- 
1  1 
1  2 
2  1 
2  2 
2  3 

並插入一排(id_a=1)的結果應自動設置id_b=3。我想避免使用數據庫鎖定,尤其是因爲沒有必要鎖定整個表時,用不同的id_a併發插入應該完全被允許。

我訪問過的Python通過SQLAlchemy的這個數據庫(使用ORM),雖然我懷疑這個問題可以用不可知關於客戶端(純MySQL的)來回答。

回答

1

SELECT coalesce(max(ID_B),0)+1 FROM yourTable WHERE ID_A = '1'

然而,如果沒有鎖定,你跑了重複ID_B值,所以你必須在INSERT語句處理重複鍵錯誤的風險。無論是對的時間或錯誤的一組號碼「重試」中的代碼自動並強制用戶再次嘗試。