在oracle中创建自动增长字段

来源:互联网 发布:sql server 百度网盘 编辑:程序博客网 时间:2024/05/01 11:26



    oracle在创建表时和其他的数据库有点不一样,如SQL SERVER可以在int类型的字段后加上identity(1,1),该字段就会从1开始,按照+1的方式自增,将这个字段设置为主键,有利于我们进行数据的插入操作。MySql中可以使用“auto_increment”即可。但是oracle有点麻烦,需要使用序列和触发器达到目的。


     首先我们创建一个会员表。
  

DROP TABLE "DATABASE"."TEST";CREATE TABLE "DATABASE"."TEST" ("ID" NUMBER PRIMARY KEY  NOT NULL, "NAME" VARCHAR2(255 BYTE) NULL ,"MEMBERSHIP" VARCHAR2(255 BYTE) NOT NULL ,"SEX" VARCHAR2(255 BYTE) NULL ,"BIRTHDAY" VARCHAR2(255 BYTE) NULL ,"PHONE" VARCHAR2(255 BYTE) NULL ,) 

 
     第二,创建会员表自动增长序列
-- 再建一个序列SEQ_TESTcreate sequence SEQ_TESTminvalue 1        --最小值nomaxvalue        --不设置最大值  maxvalue最大值start with 1      --从1开始计数increment by 1    --每次加1个nocycle           --一直累加,不循环nocache;          --不建缓冲区
√删除序列语句DROP sequence SEQ_TEST

其实一旦定义了customer_id_seq序列,就可以访问序列的curval和nextval属性。
curval:返回序列的当前值
nextval:先增加序列的值,然后返回序列值
 
以下sql语句先创建了customers表,然后插入两条记录,在插入时设定了id和name字段的值,其中id字段的值来自于customer_id_seq(新建的序列号名)序列。最后查询customers表中的id字段。 
 
create table customers(id int primary key not null, name varchar(15));
insert into customers values(customer_id_seq.nextval, 'name1');
insert into customers values(customer_id_seq.nextval, 'name2'); 


     第三,创建触发器将序列中的值赋给插入会员表的行
 
CREATE OR REPLACE TRIGGER SEQ_TEST_TG  BEFORE INSERT ON TEST  FOR EACH ROW  WHEN (new.ID is null)begin  select SEQ_TEST.nextval into :new.ID from  dual;end;
 这里的ID 是表中的需要自增长的字段
 

/*  create or replace tirgger insert_employee_autoinc
     before insert  on employee
     for each row
          begin
               select employ_autoinc.nextval into :new.Id from dual;
          end insert_employee_autoinc
 */


   最后测试一下我们的成果
 
INSERT INTO "TEST"(NAME,MEMBERSHIP,SEX,BIRTHDAY,PHONE) VALUES ('陈', 'B073', '男', '1126', '15915554615');INSERT INTO "TEST"(NAME,MEMBERSHIP,SEX,BIRTHDAY,PHONE) VALUES ('王', 'B071', '女', '0304', '13054115694');INSERT INTO "TEST"(NAME,MEMBERSHIP,SEX,BIRTHDAY,PHONE) VALUES ('曹', 'B070', '男', '0815', '13813778941');INSERT INTO "TEST"(NAME,MEMBERSHIP,SEX,BIRTHDAY,PHONE) VALUES ('郑', 'B078', '男', '1019', '13223778965');  INSERT INTO "TEST"(NAME,MEMBERSHIP,SEX,BIRTHDAY,PHONE) VALUES ('唐', 'B078', '女', '1019', '13223778965');



     select * from TEST;


 




     
   
1 0
原创粉丝点击