我希望有多个用户在数据库中共享相同的表,但每个用户有一个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 |
+----+-------------+---------+------+
答案 0 :(得分:1)
如果您可以保证每个用户只有一个会话,那么这样做会非常安全。如果用户可以有多个会话,那么无论是在触发器还是应用程序代码中执行此操作,您都需要执行独占表锁定,以确保您所在的会话是唯一获得下一个数字的会话。
但是不要为每个用户找一张桌子。这会使你的sql非常难看并阻止任何类型的sql计划共享。
使用时间戳而不是序列号可能会更好。