0


Oracle实现主键字段自增

Oracle实现主键自增有3种方式:

  1. 创建自增序列,创建表时,给主键字段默认使用自增序列
  2. 创建自增序列,使用触发器使主键自增
  3. 创建自增序列,插入语句(insert)时,使用自增序列代替值

数据库表名称为:userinfo(不能使用user,user为Oracle关键字)

准备工作:

必须先创建自增序列:

--设置自增序列,名称为"seq_userinfo",名字任意命名
create sequence seq_userinfo
 increment by 1        --每次+1    
 start with 1        --从1开始
 nomaxvalue            --不限最大值
 nominvalue            --不限最小值
 cache 20;            --设置取值缓存数为20

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

Oracle中sequence(序列)详解_睡竹的博客-CSDN博客Oracle中sequence(序列)详解cache的作用及优缺点https://blog.csdn.net/weixin_42675423/article/details/127101723

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

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

--创建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类似于方式1,但是对Java程序而言,mybatis的xml需要显式的指定触发器,不够友好

附上删除触发器和自增序列的语句:

--删除自增序列,"seq_userinfo"为自增序列的名称
drop sequence seq_userinfo
--删除触发器,"userinfo_TRIGGER"为触发器名称
drop trigger userinfo_TRIGGER
标签: oracle 数据库

本文转载自: https://blog.csdn.net/weixin_42675423/article/details/127093117
版权归原作者 睡竹 所有, 如有侵权,请联系我们删除。

“Oracle实现主键字段自增”的评论:

还没有评论