Oracle实现主键字段自增

news/2024/10/30 12:18:14/

Oracle实现主键自增有4种方式:

Identity Columns新特性自增(Oracle版本≥12c)
创建自增序列,创建表时,给主键字段默认使用自增序列
创建自增序列,使用触发器使主键自增
创建自增序列,插入语句(insert)时,使用自增序列代替值
数据库表名称为:userinfo(不能使用user,user为Oracle关键字)

方式一:Identity Columns新特性自增
该种方式要求Oracle版本≥12c

在自增字段后使用以下2种语句的1种:

generated by default as IDENTITY
generated always as identity
建表语句:

CREATE TABLE userinfo (
    id number(11) generated by default as IDENTITY,--使用自增功能
    name varchar2(20) ,
      age number(3)
)
 测试:

INSERT INTO USERINFO (name,age) VALUES('张三',18)
结果:

 

该种方式很简单,底层原理其实和下面3种方式相似,只是Oracle帮我们省去了多余的操作。

以下是剩余的3种方式,都用共同的特点(先创建自增序列): 

准备工作:
必须先创建自增序列:

--设置自增序列,名称为"seq_userinfo",名字任意命名

--设置自增序列,名称为"seq_userinfo",名字任意命名
create sequence seq_userinfoincrement by 1		--每次+1	start with 1		--从1开始nomaxvalue			--不限最大值nominvalue			--不限最小值cache 20;			--设置取值缓存数为20

Oracle中sequence(序列)详解_睡竹的博客-CSDN博客
Oracle中sequence(序列)详解cache的作用及优缺点https://blog.csdn.net/weixin_42675423/article/details/127101723

方式二:创建自增序列,创建表时,给主键字段默认使用自增序列

建表语句,设置自增字段默认使用自增序列(推荐该方式):

--创建userinfo表
CREATE TABLE userinfo (
  id number(11)  DEFAULT seq_userinfo.nextval, --"seq_userinfo"为自增序列名称
  name varchar2(20) ,
  age number(3)
);
测试:我使用的是DBeaver软件:

如图:

 

 注意:新增了一条数据,点击保存,该软件并不会立刻自动显示生成的ID,我们需要关闭当前页签,再打开就可以看到自增的ID了

如下:

 

方式三:创建自增序列,使用触发器使主键自增
建表语句:

--创建userinfo表
CREATE TABLE userinfo (
  id number(11)      not null,
  name varchar2(20) ,
  age number(3)
);
创建触发器(只需要注意注释的位置):

--创建触发器,名称为"deptinfo_TRIGGER",名字任意命名
create or replace trigger userinfo_TRIGGER
before insert on userinfo    --"userinfo"为表名称
for each row
begin
select seq_userinfo.nextval into :new.id from dual;    --1、"seq_userinfo"为自增序列名称 2、这里的id是你需要自增的序列
end userinfo_TRIGGER;    --"userinfo_TRIGGER"为触发器名称
测试:跟方式1测试一样,会存在不显示ID问题:

如图:

  

重新打开页签:

如下:

  

方式四:创建自增序列,插入语句(insert)时,使用自增序列代替值
建表语句:

--创建userinfo表
CREATE TABLE userinfo (
  id number(11)      not null,
  name varchar2(20) ,
  age number(3)
);
在插入语句中,自增的字段(ID),使用自增序列去代替

如下:

INSERT INTO userinfo(id,name,age) VALUES(seq_userinfo.nextval,'睡竹',18);

注意:方式三与MySQL、微软的SQL server的自增方式是一样的!

运行结果:

总结:
 对后台系统开发来说:

方式1和方式2最方便

方式3还需要新加一个触发器,不推荐

方式4类似于方式2,但是对Java程序而言,mybatis的xml需要显式的指定触发器,不够友好

附上删除触发器和自增序列的语句:

--删除自增序列,"seq_userinfo"为自增序列的名称
drop sequence seq_userinfo
--删除触发器,"userinfo_TRIGGER"为触发器名称
drop trigger userinfo_TRIGGER


http://www.ppmy.cn/news/107922.html

相关文章

测试环境部署hadoop

两台服务器的主机名 hostname ssh ecs-qar1-0001 ssh ecs-qar1-0002 配置jdk vim /etc/profile 旧有的 export JAVA_HOME/usr/java/openjdk-8u41 export JAVA_HOME/bigdata/server/jdk export PATH P A T H : PATH: PATH:JAVA_HOME/bin export MAVEN_HOME/work/apache-m…

越秀地产K2流程平台年度报告出炉,来看看“别人家”的流程平台

前不久,越秀地产K2流程平台2022年度运营报告新鲜出炉,K2流程平台再次递交出色成绩单。 2022年,越秀地产在K2流程平台上审批完成的流程共计103万条,日均发起流程数达2800条,日均点击量5万。在大体量、高负荷情形下&…

(2022,MoCA)Few-shot 图像生成的原型记忆(Prototype Memory)和注意力机制

Prototype Memory and Attention Mechanisms for Few Shot Image Generation 公众号:EDPJ 目录 0. 摘要 1. 简介 2. 相关工作 3. 方法 3.1 原型记忆学习 3.2 记忆概念注意力(MEMORY CONCEPT ATTENTION,MoCA) 3.3 空间上…

clipboard复制粘题问题

clipboard复制粘贴问题 简单的clipboard用法引入clipboard使用方法 通过监听获取剪切板数据自定义获取clipboard剪切板值 记录下项目中使用clipboard复制粘题问题 简单的clipboard用法 引入clipboard npm install clipboard --save官网地址:传送门 使用方法 通过监听获取剪切…

加法器种类介绍

二进制加法器 二进制加法器接收加数A和B,以及进位Ci,输出和S,以及进位输出Co.二进制加法器的真值表如下: 逻辑表达式: S A ⊕ B ⊕ C i SA⊕B⊕C_i SA⊕B⊕Ci​ C o A B B C i A C i C_oABBC_iAC_i Co​ABBCi​ACi​ 从实现的角度,可以…

SpringBoot项目开发中常用的依赖详解

<swagger.version>2.9.2</swagger.version> 这是一个Maven项目中的Swagger版本号&#xff0c;用于引入Swagger依赖。Swagger是一个API文档工具&#xff0c;能够自动生成API文档以及提供API测试工具。在Spring Boot项目中&#xff0c;可以通过引入Swagger依赖来快速…

深度学习AI编译器-TVM简介

1.为什么需要深度学习编译器 深度学习编译器主要为解决不同框架下训练的模型 部署到指定的某些设备上时所遇到的一系列复杂的问题&#xff0c;即将各种深度学习训练框架的模型 部署到各种硬件所面临的问题&#xff1b; 首先深度学习领域&#xff0c;从训练框架看&#xff0c;当…

代码自动生成:低代码与人工智能。

代码自动生成&#xff1a;低代码与人工智能TOC 在当前gpt大行其道的情况下&#xff0c;很多人都对自动生成代码感兴趣。这里将讨论一些与代码自动生成有关的话题&#xff1a; 严格的、闭包的、无歧义的范式系统是代码自动生成的前提与保障&#xff0c;没有这样的范式系统&…