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

时间:2010-05-10 13:57:47

标签: database database-design auto-increment multi-user javadb

我希望有多个用户在数据库中共享相同的表,但每个用户有一个auto_increment值。我将使用嵌入式数据库,JavaDB,据我所知,它不支持此功能。我该如何实施呢?

我应该在查找用户最后插入行的插入上实现触发器,然后添加一个,还是有更好的替代方法?或者在应用程序代码中实现它更好吗?

或者这只是一个坏主意?我认为这比为每个用户创建新表更容易维护。

示例:

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 |
+----+-------------+---------+------+

1 个答案:

答案 0 :(得分:1)

如果您可以保证每个用户只有一个会话,那么这样做会非常安全。如果用户可以有多个会话,那么无论是在触发器还是应用程序代码中执行此操作,您都需要执行独占表锁定,以确保您所在的会话是唯一获得下一个数字的会话。

但是不要为每个用户找一张桌子。这会使你的sql非常难看并阻止任何类型的sql计划共享。

使用时间戳而不是序列号可能会更好。