2010-05-10 62 views
1

我想有多個用戶共享數據庫中的相同表,但每個用戶有一個auto_increment值。我將使用嵌入式數據庫JavaDB,因爲我知道它不支持此功能。我怎樣才能實現它?如何在同一個表上實現每個用戶的Auto_Increment?

我應該在查找用戶上次插入的行的插入上實施觸發器,然後添加一個觸發器,還是有更好的選擇?或者在應用程序代碼中實現這個更好嗎?

或者這只是一個壞主意?我認爲這比爲每個用戶創建新表更容易維護。

例子:

table 
+----+-------------+---------+------+ 
| ID | ID_PER_USER | USER_ID | DATA | 
+----+-------------+---------+------+ 
| 1 |   1 |  2 | 3454 | 
| 2 |   2 |  2 | 6567 | 
| 3 |   1 |  3 | 6788 | 
| 4 |   3 |  2 | 1133 | 
| 5 |   4 |  2 | 4534 | 
| 6 |   2 |  3 | 4366 | 
| 7 |   3 |  3 | 7887 | 
+----+-------------+---------+------+ 

SELECT * FROM table WHERE USER_ID = 3 
+----+-------------+---------+------+ 
| ID | ID_PER_USER | USER_ID | DATA | 
+----+-------------+---------+------+ 
| 3 |   1 |  3 | 6788 | 
| 6 |   2 |  3 | 4366 | 
| 7 |   3 |  3 | 7887 | 
+----+-------------+---------+------+ 

SELECT * FROM table WHERE USER_ID = 2 
+----+-------------+---------+------+ 
| ID | ID_PER_USER | USER_ID | DATA | 
+----+-------------+---------+------+ 
| 1 |   1 |  2 | 3454 | 
| 2 |   2 |  2 | 6567 | 
| 4 |   3 |  2 | 1133 | 
| 5 |   4 |  2 | 4534 | 
+----+-------------+---------+------+ 
+0

爲什麼你想每個用戶單獨的自動增量ID? – 2010-05-12 08:47:11

+0

@Todd:因爲我想爲每個用戶提供一個「序列號」。 – Jonas 2010-05-13 12:57:47

+0

一次會有多少會話? – 2010-05-13 21:16:33

回答

1

如果你能保證將只有每個用戶一個會話,那麼這將是相當安全的事情。如果用戶可以有多個會話,那麼無論您是在觸發器還是在應用程序代碼中執行此操作,您都需要進行獨佔表鎖定,以確保您所處的會話是唯一獲取該下一個數字的會話。

但是不要去爲每個用戶的表。這會讓你的sql非常難看,並阻止任何形式的sql計劃共享。

使用時間戳代替序列號可能會更好。

+0

謝謝。是的,使用時間戳會比較容易,但實際上我需要一個「序列號」,將其視爲「發票號」。 – Jonas 2010-05-17 21:21:13

相關問題