Oracle实现主键字段自增的方式有哪些

84次阅读
没有评论

共计 2171 个字符,预计需要花费 6 分钟才能阅读完成。

今天丸趣 TV 小编给大家分享一下 Oracle 实现主键字段自增的方式有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

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,名字任意命名
create sequence seq_userinfo
 increment by 1 -- 每次 +1 
 start with 1 -- 从 1 开始
 nomaxvalue -- 不限最大值
 nominvalue -- 不限最小值
 cache 20; -- 设置取值缓存数为 20

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

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

以上就是“Oracle 实现主键字段自增的方式有哪些”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,丸趣 TV 小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注丸趣 TV 行业资讯频道。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-13发表,共计2171字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)