在oracle中创建自动增长字段



    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_TEST
create sequence SEQ_TEST
minvalue 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值