1

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

1 回答 1

1

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

但不要为每个用户选择一张桌子。这会让你的 sql 变得非常丑陋,并阻止任何形式的 sql 计划共享。

使用时间戳而不是序列号可能会更好地为您服务。

于 2010-05-14T07:00:49.310 回答