Oracle11g主键自动增长

虽然在学校的时候学过一段时间的Oracle,但是由于工作的时候一直用Ms SQL Server,导致以前学到的Oracle的东西都忘得差不多了。在Ms SQL Server中,主键的自动增长是很简单的,前些天在做一个东西,需要用到Oracle数据库,满怀憧憬的用ID做主键,想搞成自动增长的,搞了半天,发现居然增长不了,百度谷歌了半天之后发现,应该这样来实现自动增长:1、新建一个序列。2、新建表。3、在表中写个触发器。

下面举个例子来说明下:

新建序列:

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

新建一个表:

Create Table SOUTHGIS_Users(
ID number(10) not null primary key,--主键
UserName nvarchar2(100) not null,--登录名
UserPwd varchar2(32) not null,--登录密码
TrueName nvarchar2(50),--用户姓名
Gender nvarchar2(10) ,--性别
PhoneNum nvarchar2(50),--手机号码
EmailAddress nvarchar2(200),--电子邮箱
UserDesc nvarchar2(2000)--用户描述
);

新建触发器:

--创建触发器
Create or Replace trigger SOUTHGIS_Users_Trigger
before insert on SOUTHGIS_Users
for each row
begin
if (:new.ID is null) then
select emp_sequence.nextval into :new.ID from dual;
end if;
end;
commit;

这种方法固然可以实现自动增长,可是我总感觉不是太好,主要有两点:

1、这个序列是全局的,貌似每次增长都是在前一次的基础上加1的,也就是说如果我在表1中插入的时候是1,然后在表2中插入数据的时候ID就成了2了。

2、每一个表都要创建一个触发器,表一多感觉不好管理。

不知道各位有没有更好的办法,有的话告诉小弟一声哦,勿喷...

posted @ 2013-04-17 11:54  wadeflash  阅读(1461)  评论(3编辑  收藏  举报