如何在Oracle上使用AUTO_INCREMENT创建ID?
本文翻译自: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_GUID
是RAW(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?相关推荐
- 如何在Ubuntu上使用MultiSystem创建多启动USB盘
如何在Ubuntu上使用MultiSystem创建多启动USB盘 介绍 也许还有不少人不知道MultiSystem,它是一个用来在Linux系统中创建多启动usb盘的小型的开源软件.使用这个工具,我们 ...
- 如何在Windows上使用Git创建一个可执行脚本?
长话短说,今天介绍如何在windows上使用Git上创建一个可执行的shell脚本. " 首先我们要知道windows上Git默认添加的文件权限是:-rw-r--r--(对应权限值是644) ...
- linux clone线程,如何在Linux上使用clone()创建真正的线程?
我正在尝试使用clone()创建一个新线程.使用以下代码(-): #include #include #include #define _SCHED_H 1 #define __USE_GNU 1 # ...
- linux脚本怎么发送到桌面,如何在Linux上使用Zenity创建简单的图形Shell脚本
Zenity使用单个命令为shell脚本添加了图形界面. Shell脚本是自动化重复任务的好方法,但是它们通常只限于终端 - Zenity将它们从终端中导出到桌面上. 我们已经介绍了过去的shell脚 ...
- linux下clone一直运行,如何在Linux上使用clone()创建真正的线程?
我正在尝试使用 clone()创建一个新线程.使用以下代码(-): #include #include #include #define _SCHED_H 1 #define __USE_GNU 1 ...
- 如何在ORACLE CLOUD中创建和访问容器集群丨内附官方文档链接
墨墨导读:本文描述如何在Oracle Cloud中创建并访问容器服务.为了简单,所有的操作都是针对root隔离区. 创建允许容器运行的政策官方文档链接 这一步是必须的,否则可以增加容器容器. 官方文档 ...
- docker删除所有容器_如何在Linux上创建,列出和删除Docker容器
本篇文章介绍的内容是关于在Linux机器上创建,列出和删除docker容器,下面我们来看具体的内容. 我的官方群点击此处 1.启动Docker容器 使用下面的命令启动新的Docker容器.这将启动一个 ...
- uniapp光标自动定义到文本框_如何在Mac上的照片应用中创建自定义日历
我花了很多时间为我最好的朋友考虑一份甜蜜的礼物.当我陷入沉思时,我想到了在Mac上使用"照片"应用制作自定义日历的想法.告诉你什么:我的朋友真的很喜欢个性化的日历,上面装饰着令人难 ...
- Linux怎么给命令创建别名,如何在Linux上创建别名和Shell函数 | MOS86
使用别名和Bash Shell函数创建自己的Linux命令. 驯服重复性任务,截断冗长的进程,并使用您经常使用且难以记住的选项配置标准命令. 别名和Shell脚本是Linux和类似Unix的操作系统中 ...
最新文章
- 2013-2014 ACM-ICPC, NEERC, Southern Subregional Contest Problem D. Grumpy Cat 交互题
- Tomcat performance optimization through consolidated log file handlers
- python如何计算整数和_Python中整数和浮点数
- python中比较重要的几个函数_【python】python re模块中几个比较重要的函数
- .NET gRPC核心功能初体验
- Yii2.0 对数据库 查询的一些简单的操作
- Ubuntu12.04编译Android4.0.1源码全过程-----附wubi安装ubuntu编译android源码硬盘空间不够的问题解决
- 深度学习之OCR相关经验记录
- 2019 第二周 开发笔记
- HFSS天线设计实例_不同介质的BLE S11曲线
- python3 matplotlib多个子图分别对应不同colorbar
- urlrewrite java_Java中URL重写(urlrewrite+Maven)
- win7右键显示隐藏文件及扩展名
- Java实验-课程设计报告一:个人银行账户管理系统SavingAccountManageSystem-具体文档+源码...
- oracle outsidein,Oracle Outside In远程代码执行漏洞
- Java接口实现打印机
- CS224W-图神经网络 笔记5.2:Spectral Clustering - 谱聚类主要思想及关键结论的证明
- 什么是i人,mbti中的i型人格是怎么样的
- 电脑没声音 小喇叭不见了怎么办
- 干货!CDN内容分发网络实战技巧
热门文章
- Android 多线程之可以重复启动与停止的服务
- git warning: LF will be replaced by CRLF in 解决办法 1
- 【JavaWeb】Access restriction The type is not accessible due to restriction on required library
- Android10.0 Binder通信原理(八)-Framework层分析
- unity天空盒渐变_「是日美好事物」野兽派带来“金色眼泪”治愈新香,LV耳机印上蓝色天空...
- 灰度值怎么降级_快速提取照片中间调 用灰度蒙版为照片调色 得到更柔和的后期效果...
- JavaScript语言基础11
- iOS架构-静态库.a编译时自动导出.h头文件(24)
- uniapp 界面拖动,去掉半圆形阴影
- Android Service与Activity的交互