PostgreSQL或MySQL中是否存在一个反向“AUTO_INCREMENT”的实现?

4

在不需要手动操作的情况下(如果没有其他选项,我也可以实现手动操作),在PostgreSQL或MySQL中是否有一种自动计数器/字段的方式可以减量而不是增量

出于各种原因,在当前应用程序中,通过查看最近添加的记录,知道表中还可以添加多少条目(从数据类型的角度来看)将是很好的事情,而不是从最大值中减去最近的ID。

所以,这两个系统中是否有"AUTO_DECREMENT"或类似的东西呢?


1
@minitech - 快速查看时,如果主键字段是自动增量的,则不可能知道其大小,而如果它是递减的,则可以立即知道还剩多少个、关键字段的大小等信息。 - warren
1
如果你擅长心算,那就没问题了...但这不是编程的全部意义吗? - Ry-
1
谈到PostgreSQL,以整数ID作为主键向后排序,最小值将是-2147483648而不是0,因此如果它向下排序,与其向上排序相比,在接近底部时更难一眼识别。 - Daniel Vérité
我喜欢这个想法,但是它也有一些缺点。如果数据类型变得太小,你就不能像auto_increment解决方案中那样增加它。 - rauschen
1
另一方面,可以配置序列在1、0或其他位置停止,如所示。 - araqnid
显示剩余5条评论
1个回答

7

在PostgreSQL中,您需要进行一些手动配置,但是您可以像这样配置序列:

create sequence example_seq
 increment by -1
 minvalue 1
 maxvalue 5
 start with 5;

create table example(
example_id int primary key default nextval('example_seq'),
data text not null
);

alter sequence example_seq owned by example.example_id;

我想创建一个带有serial列的表,然后修改自动生成的序列应该是等效的。

现在如果我插入一些行,我会得到从5开始递减的example_id。如果我尝试插入超过5行,则会出现nextval: reached minimum value of sequence "example_seq" (1)


谢谢 - 在这种情况下,这看起来正是我所需要的 :) - warren

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接