如何在同一个表上实现每个用户的Auto_Increment?

问题描述:

我想有多个用户共享数据库中的相同表,但每个用户有一个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

如果你能保证将只有每个用户一个会话,那么这将是相当安全的事情。如果用户可以有多个会话,那么无论您是在触发器还是在应用程序代码中执行此操作,您都需要进行独占表锁定,以确保您所处的会话是唯一获取该下一个数字的会话。

但是不要去为每个用户的表。这会让你的sql非常难看,并阻止任何形式的sql计划共享。

使用时间戳代替序列号可能会更好。

+0

谢谢。是的,使用时间戳会比较容易,但实际上我需要一个“序列号”,将其视为“发票号”。 – Jonas 2010-05-17 21:21:13