当前位置: 首页 > news >正文

Oracle数据表ID自增操作

一、Oracle ID自增长功能介绍

       Oracle数据库默认不支持像 SQLServer、MySQL中的自增长(auto increment)功能,即自动为每一行记录的自增长字段生成下一个值。

二、Oracle ID自增长方法

第一种,通过序列(sequence)以及触发器(trigger)实现主键自增长。

       序列是Oracle数据库中用来生成唯一数值的对象,可以类比于MySQL中的自增长。使用序列递增生成的数字当作主键时,防止并发访问时产生重复的主键值。

       触发器可以在INSERT、UPDATE和DELETE操作执行之前或之后自动运行PL/SQL代码。对于使用序列生成自增长主键的情况,可以通过在插入语句之前定义一个触发器,在INSERT语句执行时触发自动生成下一个序列值。

        这种方式适用于直接使用JDBC连接数据库。这种方式将主键自增长的任务完全交给数据库,我们无需在代码层面上进行任何控制。

第二种,通过序列(sequence)以及Hibernate(JavaWeb框架)配置实现自增长。

        这种方式适用于通过Hibernate连接数据库的方式。这种方式在数据库上创建序列,通过配置在POJO类上的注释,让Hibernate去调用数据库的序列实现自增长。

        这两种方式都是通过Oracle的序列实现自增长,但第一种通过数据库的触发器在插入的时候自动插入主键。而后者则由Hibernate自动完成获取主键,插入主键这一操作。

三、Navicat创建--序列和触发器

序列和触发器的位置在【其他】选项里面。

3.1、创建表:保存时命名  T_STU

示例字段只需要一个id,一个name即可

 3.2、序列-创建序列:保存时命名 Seq001

 3.3、触发器-创建触发器:保存时命名   Trigger001

常规选项卡中:触发器类型选【TABLE】,表模式选【ROOT】,表明选择【T_STU】

高级选项卡中选填:引用旧【OLD】,引用新的【NEW】

 定义选项卡中:需要将序列Seq001的序号查出来并放入T_STU表的id中。

BEGINselect "Seq001".nextval into :NEW."id" from dual;
END;

3.4、最后看一下预览SQL

其中"Untitled"是未保存的默认触发器名。

3.5、最后一步插入数据观察递增情况

四、SQL语句创建--序列和触发器

-- 创建表
CREATE TABLE "T_STU" ("id" NUMBER NOT NULL PRIMARY KEY,"name" VARCHAR2(255)
);-- 创建序列
CREATE SEQUENCE "Seq01" MINVALUE 1 INCREMENT BY 1 NoMaxValue START WITH 1;-- 创建触发器
create TRIGGER "Trigger01" BEFORE INSERT ON "T_STU"
FOR EACH ROW 
BEGINSELECT "Seq01".nextval INTO :NEW."id" FROM dual;
END;-- 插入数据
INSERT INTO "T_STU" ("name") VALUES ('小红');-- 查看结果
SELECT * FROM "T_STU";

 

参考:Oracle ID自增长详解_笔记大全_设计学院

Oracle实现主键自增长的几种方式-腾讯云开发者社区-腾讯云

Oracle数据表ID自增操作_oracle自增id怎么设置-CSDN博客

相关文章:

  • 【附代码】NumPy加速库NumExpr(大数据)
  • 微信小程序上传代码教程
  • C#,十进制展开数(Decimal Expansion Number)的算法与源代码
  • linux查看当前连接的IP
  • 新版MQL语言程序设计:键盘快捷键交易的设计与实现
  • 【大厂AI课学习笔记】1.5 AI技术领域(1)计算机视觉
  • 【安卓操作系统——讲解】
  • ubuntu22.04安装部署03: 设置root密码
  • 【数据分析】Excel中的常用函数公式总结
  • react+antd+CheckableTag实现Tag标签单选或多选功能
  • 《动手学深度学习(PyTorch版)》笔记7.2
  • React 错误边界组件 react-error-boundary 源码解析
  • 实战案例:将已有的 MySQL8.0 单机架构变成主从复制架构
  • 【Flink入门修炼】1-2 Mac 搭建 Flink 源码阅读环境
  • 【ARM 嵌入式 编译系列 2.7 -- GCC 编译优化参数详细介绍】
  • 【许晓笛】 EOS 智能合约案例解析(3)
  • Logstash 参考指南(目录)
  • MySQL几个简单SQL的优化
  • PHP变量
  • SAP云平台里Global Account和Sub Account的关系
  • 从PHP迁移至Golang - 基础篇
  • 工程优化暨babel升级小记
  • 机器人定位导航技术 激光SLAM与视觉SLAM谁更胜一筹?
  • 开源SQL-on-Hadoop系统一览
  • 力扣(LeetCode)21
  • 力扣(LeetCode)965
  • 聊一聊前端的监控
  • 你不可错过的前端面试题(一)
  • 前端
  • 实现简单的正则表达式引擎
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 微信小程序上拉加载:onReachBottom详解+设置触发距离
  • 再次简单明了总结flex布局,一看就懂...
  • #我与Java虚拟机的故事#连载17:我的Java技术水平有了一个本质的提升
  • ${ }的特别功能
  • (C语言)字符分类函数
  • (webRTC、RecordRTC):navigator.mediaDevices undefined
  • (ZT)北大教授朱青生给学生的一封信:大学,更是一个科学的保证
  • (办公)springboot配置aop处理请求.
  • (附源码)springboot建达集团公司平台 毕业设计 141538
  • (附源码)ssm高校实验室 毕业设计 800008
  • (十六)串口UART
  • (十一)图像的罗伯特梯度锐化
  • (四)鸿鹄云架构一服务注册中心
  • (原創) 如何安裝Linux版本的Quartus II? (SOC) (Quartus II) (Linux) (RedHat) (VirtualBox)
  • (原創) 如何刪除Windows Live Writer留在本機的文章? (Web) (Windows Live Writer)
  • .bat批处理(一):@echo off
  • .Net MVC4 上传大文件,并保存表单
  • .net 获取url的方法
  • .NET 中使用 TaskCompletionSource 作为线程同步互斥或异步操作的事件
  • .net网站发布-允许更新此预编译站点
  • .Net下的签名与混淆
  • .NET中的Exception处理(C#)
  • [Angular] 笔记 16:模板驱动表单 - 选择框与选项
  • [ARC066F]Contest with Drinks Hard