本文翻译自:How to create id with AUTO_INCREMENT on Oracle?

It appears that there is no concept of AUTO_INCREMENT in Oracle, up until and including version 11g. 直到并包括11g版,Oracle中似乎都没有AUTO_INCREMENT的概念。

How can I create a column that behaves like auto increment in Oracle 11g? 如何在Oracle 11g中创建行为类似于自动增量的列?


#1楼

参考:https://stackoom.com/question/lOhN/如何在Oracle上使用AUTO-INCREMENT创建ID


#2楼

There is no such thing as "auto_increment" or "identity" columns in Oracle as of Oracle 11g . 从Oracle 11g开始,Oracle中没有诸如“ auto_increment”或“ identity”列之类的东西。 However, you can model it easily with a sequence and a trigger: 但是,您可以使用序列和触发器轻松对其进行建模:

Table definition: 表定义:

CREATE TABLE departments (ID           NUMBER(10)    NOT NULL,DESCRIPTION  VARCHAR2(50)  NOT NULL);ALTER TABLE departments ADD (CONSTRAINT dept_pk PRIMARY KEY (ID));CREATE SEQUENCE dept_seq START WITH 1;

Trigger definition: 触发定义:

CREATE OR REPLACE TRIGGER dept_bir
BEFORE INSERT ON departments
FOR EACH ROWBEGINSELECT dept_seq.NEXTVALINTO   :new.idFROM   dual;
END;
/

UPDATE: 更新:

IDENTITY column is now available on Oracle 12c: Oracle 12c上现在提供了IDENTITY列:

create table t1 (c1 NUMBER GENERATED by default on null as IDENTITY,c2 VARCHAR2(10));

or specify starting and increment values, also preventing any insert into the identity column ( GENERATED ALWAYS ) (again, Oracle 12c+ only) 或指定起始值和增量值,也防止任何插入到身份列中( GENERATED ALWAYS )(同样,仅适用于Oracle 12c +)

create table t1 (c1 NUMBER GENERATED ALWAYS as IDENTITY(START with 1 INCREMENT by 1),c2 VARCHAR2(10));

Alternatively, Oracle 12 also allows to use a sequence as a default value: 另外,Oracle 12还允许使用序列作为默认值:

CREATE SEQUENCE dept_seq START WITH 1;CREATE TABLE departments (ID           NUMBER(10)    DEFAULT dept_seq.nextval NOT NULL,DESCRIPTION  VARCHAR2(50)  NOT NULL);ALTER TABLE departments ADD (CONSTRAINT dept_pk PRIMARY KEY (ID));

#3楼

SYS_GUID returns a GUID-- a globally unique ID. SYS_GUID返回GUID-全局唯一ID。 A SYS_GUID is a RAW(16) . SYS_GUIDRAW(16) It does not generate an incrementing numeric value. 它不会生成递增的数值。

If you want to create an incrementing numeric key, you'll want to create a sequence. 如果要创建递增数字键,则需要创建一个序列。

CREATE SEQUENCE name_of_sequenceSTART WITH 1INCREMENT BY 1CACHE 100;

You would then either use that sequence in your INSERT statement 然后,您可以在INSERT语句中使用该序列

INSERT INTO name_of_table( primary_key_column, <<other columns>> )VALUES( name_of_sequence.nextval, <<other values>> );

Or you can define a trigger that automatically populates the primary key value using the sequence 或者,您可以定义一个触发器,使用该序列自动填充主键值

CREATE OR REPLACE TRIGGER trigger_nameBEFORE INSERT ON table_nameFOR EACH ROW
BEGINSELECT name_of_sequence.nextvalINTO :new.primary_key_columnFROM dual;
END;

If you are using Oracle 11.1 or later, you can simplify the trigger a bit 如果您使用的是Oracle 11.1或更高版本,则可以简化触发器

CREATE OR REPLACE TRIGGER trigger_nameBEFORE INSERT ON table_nameFOR EACH ROW
BEGIN:new.primary_key_column := name_of_sequence.nextval;
END;

If you really want to use SYS_GUID 如果您真的想使用SYS_GUID

CREATE TABLE table_name (primary_key_column raw(16) default sys_guid() primary key,<<other columns>>
)

#4楼

oracle has sequences AND identity columns in 12c oracle在12c中具有序列AND身份列

http://www.oracle-base.com/articles/12c/identity-columns-in-oracle-12cr1.php#identity-columns http://www.oracle-base.com/articles/12c/identity-columns-in-oracle-12cr1.php#identity-columns

I found this but not sure what rdb 7 is http://www.oracle.com/technetwork/products/rdb/0307-identity-columns-128126.pdf 我发现了这一点,但不确定什么是rdb 7 http://www.oracle.com/technetwork/products/rdb/0307-identity-columns-128126.pdf


#5楼

Oracle Database 12c introduced Identity, an auto-incremental (system-generated) column. Oracle Database 12c引入了Identity,这是一个自动增量(系统生成的)列。 In the previous database versions (until 11g), you usually implement an Identity by creating a Sequence and a Trigger. 在以前的数据库版本(直到11g)中,通常通过创建序列和触发器来实现身份。 From 12c onward, you can create your own Table and define the column that has to be generated as an Identity. 从12c开始,您可以创建自己的表并定义必须作为身份生成的列。

The following article explains how to use it: 下面的文章解释了如何使用它:

Identity columns - A new entry in Oracle Database 12c 标识列-Oracle Database 12c中的新条目


#6楼

Assuming you mean a column like the SQL Server identity column? 假设您指的是SQL Server标识列之类的列?

In Oracle, you use a SEQUENCE to achieve the same functionality. 在Oracle中,您可以使用SEQUENCE实现相同的功能。 I'll see if I can find a good link and post it here. 我将查看是否可以找到一个很好的链接并将其发布在这里。

Update: looks like you found it yourself. 更新:看起来像您自己找到的。 Here is the link anyway: http://www.techonthenet.com/oracle/sequences.php 无论如何,这里是链接: http : //www.techonthenet.com/oracle/sequences.php

如何在Oracle上使用AUTO_INCREMENT创建ID?相关推荐

  1. 如何在Ubuntu上使用MultiSystem创建多启动USB盘

    如何在Ubuntu上使用MultiSystem创建多启动USB盘 介绍 也许还有不少人不知道MultiSystem,它是一个用来在Linux系统中创建多启动usb盘的小型的开源软件.使用这个工具,我们 ...

  2. 如何在Windows上使用Git创建一个可执行脚本?

    长话短说,今天介绍如何在windows上使用Git上创建一个可执行的shell脚本. " 首先我们要知道windows上Git默认添加的文件权限是:-rw-r--r--(对应权限值是644) ...

  3. linux clone线程,如何在Linux上使用clone()创建真正的线程?

    我正在尝试使用clone()创建一个新线程.使用以下代码(-): #include #include #include #define _SCHED_H 1 #define __USE_GNU 1 # ...

  4. linux脚本怎么发送到桌面,如何在Linux上使用Zenity创建简单的图形Shell脚本

    Zenity使用单个命令为shell脚本添加了图形界面. Shell脚本是自动化重复任务的好方法,但是它们通常只限于终端 - Zenity将它们从终端中导出到桌面上. 我们已经介绍了过去的shell脚 ...

  5. linux下clone一直运行,如何在Linux上使用clone()创建真正的线程?

    我正在尝试使用 clone()创建一个新线程.使用以下代码(-): #include #include #include #define _SCHED_H 1 #define __USE_GNU 1 ...

  6. 如何在ORACLE CLOUD中创建和访问容器集群丨内附官方文档链接

    墨墨导读:本文描述如何在Oracle Cloud中创建并访问容器服务.为了简单,所有的操作都是针对root隔离区. 创建允许容器运行的政策官方文档链接 这一步是必须的,否则可以增加容器容器. 官方文档 ...

  7. docker删除所有容器_如何在Linux上创建,列出和删除Docker容器

    本篇文章介绍的内容是关于在Linux机器上创建,列出和删除docker容器,下面我们来看具体的内容. 我的官方群点击此处 1.启动Docker容器 使用下面的命令启动新的Docker容器.这将启动一个 ...

  8. uniapp光标自动定义到文本框_如何在Mac上的照片应用中创建自定义日历

    我花了很多时间为我最好的朋友考虑一份甜蜜的礼物.当我陷入沉思时,我想到了在Mac上使用"照片"应用制作自定义日历的想法.告诉你什么:我的朋友真的很喜欢个性化的日历,上面装饰着令人难 ...

  9. Linux怎么给命令创建别名,如何在Linux上创建别名和Shell函数 | MOS86

    使用别名和Bash Shell函数创建自己的Linux命令. 驯服重复性任务,截断冗长的进程,并使用您经常使用且难以记住的选项配置标准命令. 别名和Shell脚本是Linux和类似Unix的操作系统中 ...

最新文章

  1. 2013-2014 ACM-ICPC, NEERC, Southern Subregional Contest Problem D. Grumpy Cat 交互题
  2. Tomcat performance optimization through consolidated log file handlers
  3. python如何计算整数和_Python中整数和浮点数
  4. python中比较重要的几个函数_【python】python re模块中几个比较重要的函数
  5. .NET gRPC核心功能初体验
  6. Yii2.0 对数据库 查询的一些简单的操作
  7. Ubuntu12.04编译Android4.0.1源码全过程-----附wubi安装ubuntu编译android源码硬盘空间不够的问题解决
  8. 深度学习之OCR相关经验记录
  9. 2019 第二周 开发笔记
  10. HFSS天线设计实例_不同介质的BLE S11曲线
  11. python3 matplotlib多个子图分别对应不同colorbar
  12. urlrewrite java_Java中URL重写(urlrewrite+Maven)
  13. win7右键显示隐藏文件及扩展名
  14. Java实验-课程设计报告一:个人银行账户管理系统SavingAccountManageSystem-具体文档+源码...
  15. oracle outsidein,Oracle Outside In远程代码执行漏洞
  16. Java接口实现打印机
  17. CS224W-图神经网络 笔记5.2:Spectral Clustering - 谱聚类主要思想及关键结论的证明
  18. 什么是i人,mbti中的i型人格是怎么样的
  19. 电脑没声音 小喇叭不见了怎么办
  20. 干货!CDN内容分发网络实战技巧

热门文章

  1. Android 多线程之可以重复启动与停止的服务
  2. git warning: LF will be replaced by CRLF in 解决办法 1
  3. 【JavaWeb】Access restriction The type is not accessible due to restriction on required library
  4. Android10.0 Binder通信原理(八)-Framework层分析
  5. unity天空盒渐变_「是日美好事物」野兽派带来“金色眼泪”治愈新香,LV耳机印上蓝色天空...
  6. 灰度值怎么降级_快速提取照片中间调 用灰度蒙版为照片调色 得到更柔和的后期效果...
  7. JavaScript语言基础11
  8. iOS架构-静态库.a编译时自动导出.h头文件(24)
  9. uniapp 界面拖动,去掉半圆形阴影
  10. Android Service与Activity的交互