Oracle建表设置主键自增实现MySQL中的autu_increment

在新项目中接触到了Oracle数据库,和MySQL不同,Oracle没有自增的选项,在创建MySQL时只要auto_increment就可以实现的自增或者是使用自增函数,在Oracle中不适用,自己找了写资料总结如下:

Oracle中没有自增的选项,但在Oracle中出现了新的定义序列[数学上,序列是被排成一列的对象(或事件);这样每个元素不是在其他元素之前,就是在其他元素之后。这里,元素之间的顺序非常重要。]

发现很多用Oracle的人都不会像使用mysql那样,添加语句不写id,因为自增的MySQL会自动添加新的id。

接手项目发现:

insert into admin_info(id,admin_name,admin_realname,admin_pass,status,enterPriseNo)values
        (seq_admin_info.nextval,#{admin_name},#{admin_realname},#{admin_pass},#{status},#{enterPriseNo})

这里的seq_admin_info.nextval就是序列 序列名为seq_admin_info 其中nextval是获取序列存在最大的下个数字。

到了重头戏,如何添加序列:

--添加序列
create sequence seq_backstage_cartes --添加序列名称(一般约定为:'seq_'加数据表的名称)
increment by 1              -- 每次加几个
start with 1                -- 从1开始计数
maxvalue 999999999          -- 最大值

创建和MySQL相同的自增样式:
因为使用上的不通过,所以猜想能否实现和MySQL相同的自增形式,最终得到如下方式:
Tip:同比上面的序列,下面的自动增长可以在insert语句中不添加自增的字段,底层原理还是使用的序列。
创建表

    create table member(
    memberId number primary key,
    memberMail varchar2(20)not null,
    memberName varchar2(20) not null,
    memberPassword varchar2(20)
    );

然后,你需要一个自定义的sequence

    CREATE SEQUENCE emp_sequence
    INCREMENT BY 1 -- 每次加几个
    START WITH 1 -- 从1开始计数
    NOMAXVALUE -- 不设置最大值
    NOCYCLE -- 一直累加,不循环
    NOCACHE -- 不建缓冲区

你只有了表和序列还不够,还需要一个触发器来执行它!

    create trigger mem_trig before
    insert on member for each row when (new.memberId is null)
    begin

     select emp_sequence.nextval into:new.memberId from dual;

     end;

插入数据

    insert into member(memberMail,memberName,memberPassword) values('123@qq.com','jack','123456');

查询表中数据

    select * from member;

得到结果为id自动增长。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值