我试图实现一个票务系统,产生的数字将是连续的。
4000,4001,4002,4003
我的想法是拥有一个与当前抽奖相关的表,而ticket_no列是一个自动增量列,当外键更改时,它会重置。
复合键是raf_id和ticket_no,因为在相同的抽奖中不应该多次存在票证no。
这个是可能的吗?
|------------|-----------|---------|
| raf_id | ticket_no | user_id |
|------------|-----------|---------|
| 1 | 4000 | 1 |
| 1 | 4001 | 1 |
| 1 | 4002 | 2 |
| 1 | 4003 | 3 |
| 2 | 4000 | 4 |
| 2 | 4001 | 4 |
| 2 | 4002 | 5 |
| 2 | 4003 | 1 |
|------------|-----------|---------|发布于 2020-04-14 12:44:44
未知。很有可能不是。(如:没有开箱即用的数据库功能)
是。
您需要跟踪表中的“最后使用的数字”。例如
create table raf (
raf_id int, -- identity/autoincrement
last_number int default 4000 not null,
constraint raf_pk primary key (raf_id)
);从这里开始,您的流程需要这样进行:
RAF_ID抓取一个锁RAF表。COMMIT数据根据您的RDBMS,可以将一些步骤组合成一个步骤。如何做这些事情(例如“抓取锁”的最佳实践)也可以是依赖于RDBMS的。
“抓取锁”步骤将序列化您的代码。这对数据库不好。此要求/过程将限制添加新行的速度。我建议您考虑其他方法(例如使用VIEW的RANK() )。
这可以在TRIGGER中实现吗?也许吧。
https://dba.stackexchange.com/questions/264928
复制相似问题