欢迎来到福编程网,本站提供各种互联网专业知识!
您的位置:网站首页 > 数据库 > Oracle

Oracle数据库中创建自增主键的实例教程

发布时间:2016-05-21 作者:炫影魔心 来源:转载
Oracle的字段自增功能,可以利用创建触发器的方式来实现,接下来我们就来看看Oracle数据库中创建自增主键的实例教程,需要的朋友可以参考下

在设计数据库表的时候发现Oracle没有自增主键的设置,Google了解到Oracle本身并不支持自增主键,需要通过序列(Sequence)和触发器(Trigger)实现。

创建表Student

代码
  1. Create Table Student(
  2. id number(12) primary key, --通过序列和触发器实现id的自增
  3. name varchar2(20) ,
  4. age number(3) ,
  5. sex number(1)
  6. )

创建序列Sequence

代码
  1. Create Sequence SEQ_STUDENT
  2. minvalue 1
  3. maxvalue 99999999999999999999
  4. start with 1 --从1开始
  5. increment by 1 --增量为1
  6. cache 0
  7. order;

创建触发器Trigger

代码
  1. Create or Replace Trigger STUDENT_AUTOINCREMENT
  2. Before Insert on Student
  3. For Each Row
  4. When (NEW.ID IS NULL)
  5. Begin
  6. Select SEQ_STUDENT.NEXTVAL INTO :NEW.ID FROM DUAL;
  7. End;

注意点:

1:一个sequence可以被多个表共享。

2:被多个表共享的sequence生成的数字序列始终连续,不会重新开始。

3:如果不再使用的sequence请删除。

代码
  1. SELECT * FROM DAYSBFJ.DAYS_CARD_UPDATE3 order by id asc
  2. --alter table DAYSBFJ.DAYS_CARD_UPDATE3 add source_Flag varchar2(2);
  3. --create sequence DAYS_CARD_UPDATE2_SEQ_ID minvalue 1 maxvalue 999999999 start with 1;
  4. --Update DAYSBFJ.DAYS_CARD_UPDATE2 set id = DAYS_CARD_UPDATE2_SEQ_ID.nextval;
  5. --update DAYSBFJ.DAYS_CARD_UPDATE3 set SOURCE_FLAG = '2'

另一个例子:

新建一个缺少主键的表

代码
  1. create table test1(name1 varchar2(40),city varchar2(40));

--插入数据

代码
  1. insert into test1 values('name1','nanjing');
  2. insert into test1 values('name1','nanjing');
  3. insert into test1 values('name2','nanjing1');
  4. insert into test1 values('name3','nanjing2');
  5. insert into test1 values('name4','nanjing3');
  6. insert into test1 values('name5','nanjing4');
  7. insert into test1 values('name6','nanjing5');
  8. insert into test1 values('name7','nanjing6');
  9. insert into test1 values('name8','nanjing7');
  10. insert into test1 values('name9','nanjing8');
  11. insert into test1 values('name10','nanjing9');
  12. insert into test1 values('name10','nanjing9');
  13. insert into test1 values('name12','nanjing11');
  14. insert into test1 values('name13','nanjing12');
  15. insert into test1 values('name14','nanjing13');
  16. commit;

--增加主键ID

代码
  1. alter table TEST1 add id number(10);

--设置sequence使ID自增

代码
  1. create sequence SEQ_ID
  2. minvalue 1
  3. maxvalue 999999999
  4. start with 1;

--将id的值设置为sequence

代码
  1. Update test1 set id=seq_id.nextval;
  2. commit;

--设置id为主键

代码
  1. alter table TEST1
  2. add constraint PK_TEST1 primary key (ID);
  3. select ID,Name1,CITY from TEST1;

相关推荐