您的位置:首页 > 数据库 > Oracle

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

2017-08-21 13:40 639 查看
在新项目中接触到了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自动增长。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  oracle 数据库