首页 > 解决方案 > 如何在达到限制时将标识列的值循环回 1?

问题描述

我正在创建一个表,并为它设置一个自动生成的值,从 1 开始,但我希望这个值有一个限制,然后从 1 重新开始。

我应该以什么方式将列定义为这样?

CREATE TABLE MYTABLE
(
    ID NUMBER GENERATED BY DEFAULT AS IDENTITY (START WITH 1),
    NAME VARCHAR(100)
);

标签: sqloracleauto-incrementcreate-table

解决方案


这是一种选择:

CREATE TABLE MYTABLE (
    ID NUMBER GENERATED BY DEFAULT AS IDENTITY (
        START WITH 1
        INCREMENT BY 1 
        MAXVALUE 10
        CYCLE
        NOCACHE
    ),
    NAME VARCHAR(100)
);

由于CYCLE启用了该选项,因此序列在达到 中指定的值时会重置MAXVALUE。我添加了该NOCACHE选项,尽管此处并非绝对必要(唯一的要求是该CACHE值必须小于MAXVALUE)。

这是一个DB Fiddle 演示,它MAXVAL设置为2:您可以看到插入的第三行得到了id 1


推荐阅读