Oracle实现主键字段自增

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

该种方式要求Oracle版本≥12c

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

  1. generated by default as IDENTITY
  2. 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",名字任意命名
create sequence seq_userinfoincrement by 1		--每次+1	start with 1		--1开始nomaxvalue			--不限最大值nominvalue			--不限最小值cache 20;			--设置取值缓存数为20

sequence各个参数详解,可以参考这边文章:
参考文章

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

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

–创建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.mzph.cn/news/88705.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot之文件上传(单文件与多文件上传的使用)

文章目录 前言文件上传总结 前言 SpringBoot的单文件、多文件上传。 文件上传 页面代码/static/form/form_layouts.html <form role"form" th:action"{/upload}" method"post" enctype"multipart/form-data"><div class&q…

MySQL MHA 高可用

目录 1 MySQL MHA 1.1 什么是 MHA 1.2 MHA 的组成 1.3 MHA 的特点 2 搭建 MySQL MHA 2.1 Master、Slave1、Slave2 节点上安装 mysql5.7 2.2 修改 Master、Slave1、Slave2 节点的主机名 2.3 修改 Master、Slave1、Slave2 节点的 Mysql主配置文件/etc/my.cnf 2.4 在 Mast…

图像采集卡在应用程序的重要性概述

达到最大吞吐量是工业和工厂自动化的关键标准之一。提高传感器分辨率和帧速率有助于实现目标&#xff0c;但会限制带宽&#xff0c;并带来新的传输问题。图像采集卡是将相机连接到PC的最方便、最可靠的方式&#xff0c;在工业环境中使用图像采集卡为高速应用带来了特定的好处&a…

[C++ 网络协议] 异步通知I/O模型

1.什么是异步通知I/O模型 如图是同步I/O函数的调用时间流&#xff1a; 如图是异步I/O函数的调用时间流&#xff1a; 可以看出&#xff0c;同异步的差别主要是在时间流上的不一致。select属于同步I/O模型。epoll不确定是不是属于异步I/O模型&#xff0c;这个在概念上有些混乱&a…

GB28181-流传输方式

1 UDP 服务端开启UDP端口监听&#xff0c;设备端主动向服务端发起流推送 2 TCP被动&#xff08;passive&#xff09; 服务端开启TCP端口监听&#xff0c;设备端主动向服务端发起TCP连接&#xff0c;连接成功&#xff0c;设备推送流数据。 3 TCP主动&#xff08;active&#x…

Centos服务在服务器重启后自启

以Dolphin为例 打开rc.local文件以编辑&#xff1a; sudo vi /etc/rc.d/rc.local在文件中添加您的启动命令。在您的情况下&#xff0c;要添加的命令如下&#xff1a; sh /opt/dolphinscheduler/zookeeper/bin/zkServer.sh start sh /opt/dolphinscheduler/dolphinscheduler/…

OpenHarmony自定义构建函数:@Builder装饰器

前面章节介绍了如何创建一个自定义组件。该自定义组件内部UI结构固定&#xff0c;仅与使用方进行数据传递。ArkUI还提供了一种更轻量的UI元素复用机制Builder&#xff0c;Builder所装饰的函数遵循build()函数语法规则&#xff0c;开发者可以将重复使用的UI元素抽象成一个方法&a…

【深度学习】【Opencv】Python/C++调用onnx模型【基础】

【深度学习】【Opencv】python/C调用onnx模型【基础】 提示:博主取舍了很多大佬的博文并亲测有效,分享笔记邀大家共同学习讨论 文章目录 【深度学习】【Opencv】python/C调用onnx模型【基础】前言Python版本OpenCVWindows平台安装OpenCVopencv调用onnx模型 C版本OpenCVWindows平…

【C++编程能力提升】

代码随想录训练营Day48 | Leetcode 198、213、337 一、198 打家劫舍二、213 打家劫舍II三、337 打家劫舍III 一、198 打家劫舍 题目链接&#xff1a;198 打家劫舍 核心&#xff1a;经典的动态规划问题&#xff0c;是否选择当前房屋有两种状态&#xff0c;要么选&#xff0c;要…

如何利用React和Flutter构建跨平台移动应用

如何利用React和Flutter构建跨平台移动应用 移动应用已经成为现代生活的一部分&#xff0c;每天都有大量的手机用户在使用各种各样的应用程序。对于开发者来说&#xff0c;构建一个适用于多个平台的移动应用是一个挑战。幸运的是&#xff0c;有一些工具可以帮助我们轻松地实现…

spring bean实例化过程及顺序

spring bean的初始化从doCreateBean方法开始&#xff0c;依次会调用下面三个方法执行bean的初始化。大部分方法都在AbstractAutowireCapableBeanFactory类中。 实例化 createBeanInstance()方法根据BeanDef获取bean对应的class通过反射调用构造函数进行bean的实例化。 这里会…

视频汇聚平台EasyCVR从一分屏切换到四分屏后加载记录显示黑屏该如何解决?

视频汇聚/视频云存储/集中存储/视频监控管理平台EasyCVR能在复杂的网络环境中&#xff0c;将分散的各类视频资源进行统一汇聚、整合、集中管理&#xff0c;实现视频资源的鉴权管理、按需调阅、全网分发、云存储、智能分析等&#xff0c;视频智能分析平台EasyCVR融合性强、开放度…

基于STM32+华为云IOT设计的智能门禁系统

一、项目介绍 智能门禁系统是一种应用物联网技术的智能化安防系统&#xff0c;提供安全高效的门禁管理和远程监控功能。传统的门禁系统通常使用磁卡、密码或钥匙等方式进行开锁&#xff0c;但存在易丢失、易复制、操作繁琐等问题。为了解决这些问题&#xff0c;并提高门禁安全…

UML,集合框架

1.什么是UML UML是统一建模语言的简称&#xff0c;它是一种由一整套图表组成的标准化建模语言。UML用于帮助系统开发人员阐明&#xff0c;展示&#xff0c;构建和记录软件系统的产出。UML代表了一系列在大型而复杂系统建模中被证明是成功的做法&#xff0c;是开发面向对象软件…

Spring学习笔记13 Spring对事务的支持

Spring学习笔记12 面向切面编程AOP-CSDN博客 什么是事务:在一个业务流程当中,通常需要多条DML(insert delete update)语句共同联合才能完成,这多条DML语句必须同时成功,或者同时失败,这样才能保证数据的安全. 多条DML要么同时成功,要么同时失败,叫做事务(Transaction) 事务四…

ARM IIC总线实现温湿传感器

IIC.h #ifndef __IIC_H__ #define __IIC_H__ #include "stm32mp1xx_gpio.h" #include "stm32mp1xx_rcc.h"/* 通过程序模拟实现I2C总线的时序和协议* GPIOF ---> AHB4* I2C1_SCL ---> PF14* I2C1_SDA ---> PF15** */#define SET_SDA_OUT do{G…

机器人过程自动化(RPA)入门 3. 顺序、流程图和控制流程

到目前为止&#xff0c;我们已经了解了RPA是什么&#xff0c;并且我们已经看到了通过记录任务的活动并运行它来训练UiPath机器人是多么简单。使用记录器的UiPath可以很容易地自动化日常任务。在我们开始自动化复杂的任务之前&#xff0c;让我们学习如何控制从一个到另一个的活动…

Linux命令之chattr命令

一、chattr命令简介 chattr命令用于更改文件或目录的属性&#xff0c;包括不可修改属性、同步属性、追加属性、无尽属性、压缩属性、无尽属性、不可删除属性等。chattr命令只能由超级用户或文件的所有者使用。 二、chattr命令使用示例 1、给文件设置版本 -v参数设置版本信息只…

.net core DI注入,构造函数含有动态参数

使用.net core 开发的时候我们使用依赖注入来实例化需要的服务等&#xff0c;有时候这个服务类的构造函数是有参数的&#xff0c;此时想使用依赖注入就变得很麻烦。我们可以采用工厂模式&#xff0c;去构造demo如下 person类 namespace DIDynamicConstructorParams.TestDI {p…

12KM02E-V0002 3EGM030300R0002 模块化和加固的边缘计算加速

12KM02E-V0002 3EGM030300R0002 模块化和加固的边缘计算加速 随着边缘人工智能解决方案的兴起&#xff0c;对实时洞察和自主决策的需求显著增长。这也带来了对变革性技术的高度需求&#xff0c;这些技术可以在坚固的边缘支持和提供最佳性能。为了应对技术革命&#xff0c;Prem…