如何为现有列创建自动递增列?

时间:2019-06-14 09:17:47

标签: oracle12c

我正在使用具有以下表结构的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是我的主键,因此现在我也要使其自动递增,因此请让我知道如何使其自动递增。

谢谢!

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

1 个答案:

答案 0 :(得分:0)

您可能想使用Identities-使用Identity创建表可以省略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,但这将与Identity混淆,就像通常使用标准{{1} }:

Sequence

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

检查表格:

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

重新运行“ NEXTVAL”插入:

select * from identities;

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

已创建1行。

重新检查表格:

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

希望这会有所帮助。