首页 > 解决方案 > 如何为现有列创建自动增量列?

问题描述

我正在使用 Oracle 12c,其中我的表结构如下:-

CREATE TABLE patients (
  patient_id Integer NOT NULL,
  customer_id Integer NOT NULL,
  title varchar(5) NOT NULL,
  fname varchar(125) NOT NULL,
  lname varchar(125) NOT NULL,
  dob date NOT NULL,
  is_medical_card NUMBER(1) NOT NULL CHECK (is_medical_card IN (0,1)),
  scheme_number Integer NOT NULL,
  status varchar(50) NOT NULL,
  created_on date NOT NULL,
  last_update_date date NOT NULL,
  consent_flag NUMBER(1) NOT NULL CHECK (consent_flag IN (0,1)),
  relationship varchar(50) NOT NULL
);

我的主键在哪里patient_id,所以现在我也想让它自动递增,所以请告诉我我该怎么做才能让它自动递增。

谢谢!

需要为现有列创建自动增量。

标签: oracle12c

解决方案


您可能想要使用Identities- 创建具有标识的表使您有机会省略ID值并让 Oracle 在所需列上使用序列:

1. 让我们创建表:

CREATE TABLE identities (
  id NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY,
  description varchar2(100) NOT NULL
);

表已创建。

2. 您需要创建一个主键以确保唯一性:

alter table identities add constraint id_pk primary key (ID);

表已更改。

3.让我们以不同的方式插入一些数据:

INSERT INTO identities (description)
VALUES('Insert Description omitting ID');

创建了 1 行。

INSERT INTO identities (id,description)
VALUES(NULL,'Insert with explicit NULL value');

创建了 1 行。

4.保存完成的工作

commit;

提交完成。

5.检查结果

select * from identities;

        ID DESCRIPTION
---------- ---------------------------------------------
         1 Insert Description omitting ID
         2 Insert with explicit NULL value

如您所见,我们没有为 指定任何数字ID,但列Identity上的ID为我们指定了

注意:请 注意,您可以手动插入,但这会像通常使用标准那样ID弄乱:IdentitySequence

INSERT INTO identities (id,description)
VALUES(3,'Manually insert an ID value');

1 row created.


INSERT INTO identities (description)
VALUES('Test Nextval');
INSERT INTO identities (description)
*
ERROR at line 1:
ORA-00001: unique constraint (XXX.ID_PK) violated

这个错误,因为它试图在之前用语句手动插入的 ID 中插入一个“3”。

检查表:

select * from identities;

        ID DESCRIPTION
---------- ---------------------------------------------
         1 Insert Description omitting ID
         2 Insert with explicit NULL value
         3 Manually insert an ID value

重新运行“NEXTVAL”插入:

INSERT INTO identities (description)
VALUES('Test Nextval');

创建了 1 行。

重新检查表:

select * from identities;

        ID DESCRIPTION
---------- ---------------------------------------------
         1 Insert Description omitting ID
         2 Insert with explicit NULL value
         3 Manually insert an ID value
         4 Test Nextval

希望这可以帮助。


推荐阅读