Oracle实现主键字段自增的四种方式

 更新时间:2023年03月13日 11:10:01   作者:睡竹  
众所周知MySQL数据库的主键自增设置非常简单,任何一个常用的可视化工具都支持,只要打一下勾就可以开启主键自增了,然而Oracle并没有那么简单,这篇文章主要给大家介绍了关于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实现主键字段自增的四种方式的文章就介绍到这了,更多相关Oracle主键字段自增内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • oracle 存储过程、函数和触发器用法实例详解

    oracle 存储过程、函数和触发器用法实例详解

    这篇文章主要介绍了oracle 存储过程、函数和触发器用法,结合实例形式详细分析了oralce 存储过程、函数和触发器具体功能、原理、定义、使用方法及相关操作注意事项,需要的朋友可以参考下
    2020-02-02
  • Oracle设置DB、监听和EM开机启动的方法

    Oracle设置DB、监听和EM开机启动的方法

    这篇文章主要介绍了Oracle设置DB、监听和EM开机启动的方法,本文通过图文实例相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-04-04
  • Oracle带输入输出参数存储过程(包括sql分页功能)

    Oracle带输入输出参数存储过程(包括sql分页功能)

    这篇文章主要介绍了Oracle带输入输出参数存储过程(包括sql分页功能)的相关知识,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-10-10
  • Oracle数据库事务的开启与结束详解

    Oracle数据库事务的开启与结束详解

    事务是一个整体,这些操作要么全部执行成功,要么全部不执行,下面这篇文章主要给大家介绍了关于Oracle数据库事务的开启与结束的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2022-06-06
  • Excel VBA连接并操作Oracle

    Excel VBA连接并操作Oracle

    Excel通过ADO方式连接到Oracle并操作Oracle给我们这些编程能力不强的人带来很大的福音,结合着Excel的数据处理与图表制作,就能很轻松地处理一些常规工作。
    2009-08-08
  • oracle表被锁定的完美解决方法

    oracle表被锁定的完美解决方法

    ora-00031:session marked for kill处理oracle中杀不掉的锁一些ORACLE中的进程被杀掉后,状态被置为”killed”,但是锁定的资源很长时间不释放,有时实在没办法,只好重启数据库。现在小编给大家分享另外一种oracle表被锁定的解决方法,需要的的朋友参考下吧
    2017-07-07
  • 彻底删除Oracle数据库的方法

    彻底删除Oracle数据库的方法

    删除Oracle数据库并不难,但要彻底删除就不简单了,下面为大家介绍下具体的实现,感兴趣的朋友可以参考下
    2014-02-02
  • ORACLE常见错误代码的分析与解决(三)

    ORACLE常见错误代码的分析与解决(三)

    ORACLE常见错误代码的分析与解决(三)...
    2007-03-03
  • Oracle基本查询过滤排序示例解析

    Oracle基本查询过滤排序示例解析

    以下是对Oracle中的基本查询过滤排序示例进行了详细的分析介绍,需要的朋友可以参考下
    2013-08-08
  • Oracle分析函数用法详解

    Oracle分析函数用法详解

    本文详细讲解了Oracle分析函数的用法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05

最新评论