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中。

BEGIN
  select "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 
BEGIN
  SELECT "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博客