Oracle数据库主键自增

在学习mysql时,我们很容易通过auto_increment就能实现主键自增的功能,但是在Oracle数据库中,是没有这个关键字的,所以也不能通过这样来实现主键自增。下面我就为大家介绍两种实现主键自增的方法。

两种方法的基础都有一个概念就是序列(sequence)的概念,一种是利用序列和显式调用的方式去实现主键自增,另一种是通过序列和触发器(trigger)来实现主键自增。

/1.利用序列主键自增/
第一步、创建表
–创建表,主键为ID

CREATE TABLE YFF (

ID INT primary key ,

NAME VARCHAR2(10)

);

–创建表的格式

CREATE TABLE 表名(

字段名 字段类型(可以加一些约束,例如主键约束),

字段名 字段类型

)

第二步、创建序列
–创建序列

   create sequence seq_yff

   start with 1

   increment by 1;

–创建序列的格式

create sequence 序列名称

start with 开始数字

increment by 增长数字

minvalue 最小值

maxvalue 最大值

cycle 是否循环(cycle为循环,nocycle为不循环)

nocache 不使用缓存

关于序列的其他重要操作
–查询序列(利用nextval查询序列下一次的值)

   select seq_yff.nextval from dual;

–查询序列的格式

   Select 序列名.nextval from dual

(dual为伪表,当我们不需要从具体的表来取得表中数据,而是单纯地

得到一些我们想得到的信息,就可以使用伪表)

注意:这里第一次执行这条查询语句得到结果为1,再执行得到2,第一种实现主键自增的方法就是使用序列名.nextval使得值一直增加的

   --删除序列()

   DROP SEQUENCE seq_yff;

注意:序列和表不是连接在一起的,当序列创建之后,用在这个表之后,我将该表删除,但是序列的值还是停留在之前的值上,所以需要注意这个问题

第三步、利用序列+显式化调用 进行自增

 1.  insert into YFF values (seq_yff.nextval,'张三');

 2.  insert into YFF values (seq_yff.nextval,'张三');

 3. select * from YFF;

在这里插入图片描述

–2利用序列+触发器调用 进行主键自增
此处已经表和序列都用第一种方法中使用过的

  第一步、在表和序列创建好之后,创建触发器

–创建触发器

  create or replace trigger tri_yff_insert

    before insert on YFF

    referencing old as old new as new

    for each row

  begin

    select seq_yff.nextval

      into :new.ID

      from dual;

  end tri_yff_insert;

–创建触发器格式

create [or replace] tigger 触发器名

触发时间 触发事件

on 表名

[for each row]

begin

pl/sql语句

end

–解释上面的触发器语句

create or replace trigger tri_yff_insert    创建触发器并命名

    before insert on YFF              触发时间为向表YFF中插入时

    referencing old as old new as new  

    for each row      对表的每一行触发一次,否则只对整表执行一次

  begin

    select seq_yff.nextval

      into :new.ID

      from dual;

  end tri_yff_insert;

其他对触发器的操作
–查询表中触发器

  select * from all_triggers WHERE table_name='YFF'



   --删除触发器

   drop trigger tri_yff_insert;

第二步、插入数据
insert into YFF (ID,Name) values(100,‘李四’);

insert into YFF (Name) values(‘李四’);

–不管给不给主键赋值,这里触发器都会使得主键值为序列的值
在这里插入图片描述

————————————————
版权声明:本文为CSDN博主「丶YF丶」的原创文章
原文链接:https://blog.csdn.net/qq_37688023/article/details/88291875

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值