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

来源:互联网 发布:淘宝尺寸文字自定义 编辑:程序博客网 时间:2024/05/21 09:27

在新项目中接触到了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自动增长。

原创粉丝点击