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
,所以现在我也想让它自动递增,所以请告诉我我该怎么做才能让它自动递增。
谢谢!
需要为现有列创建自动增量。
解决方案
您可能想要使用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
弄乱:Identity
Sequence
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
希望这可以帮助。
推荐阅读
- mysql - 我可以在 MySQL 的 where 子句中有不同的选择吗?
- javascript - 如何序列化 Django 模型以匹配 Bootstrap-tables 插件所需的格式?
- sql - 检查字符串中是否存在值
- c# - 用于连接到本地 REST API 的 Azure 应用服务
- html - 有 2 个连续的 div,第二个与移动设备中的第一个重叠
- sql - Access Query 中的 IIF 语句在所有值中返回 NULL
- git - 暂时禁用 git 查看文件更改
- python - 如何在 Python 中定义通用协变函数?
- javascript - 有没有办法可以复制 502 网关超时错误?
- java - 在 Eclipse 中运行 Weblogic