oracle 主键 自增

select battle_seq.nextval from dual


oracle和mysql不同。没有自增长字段auto_increment,可以通过序列和行触发器实现

    1、建立数据库测试表

    



Sql代码 
1.CREATE TABLE TEST( 
2.       ID NUMBER(12) PRIMARY KEY, 
3.       NAME VARCHAR2(20) 
4.       ); 



   2、创建自增长序列

  



Java代码 
1.CREATE SEQUENCE test_seq   
2.INCREMENT BY 1   
3.START WITH 1  --从1开始 
4.NOMAXVALUE    --不设最大值 
5.NOCYCLE       --不循环 
6.NOCACHE; 

 

   3、创建触发器

   



Sql代码 
1.CREATE TRIGGER increase_test  
2.BEFORE INSERT    -- 
3.ON TEST  
4.FOR EACH ROW 
5.BEGIN 
6.  SELECT test_seq.Nextval  
7.  INTO:NEW.ID  FROM DUAL; 
8.END;   

    定义受到影响的各行触发器.这些触发器称为行触发器

    行触发器的定义方式与语句触发器类似,但是有以下两个例外

    1、行触发器要在定义的触发语句中包含for each row子句,还可以包含referencing语句

    2、在before...for each row触发器中,可以引用受到影响的行值



     在行触发器中,用户能够访问受到影响的行值。通过引用具有相关名称的列,即可以获取语句执行前的值和语句执行后的值。前映象(before image)的默认名称是:old,后映象(after image)的默认名称是:new



     在insert触发器中,只可以使用:new值。由于以前没有存在这些行,所以不能够有:old.与此相反,在delete触发器中,则没有:new,只有:old, update触发器具有前映象:old和后映象:new   



    4、测试数据

   



Sql代码 
1.INSERT INTO TEST(NAME) VALUES('JASON'); 
2.INSERT INTO TEST(ID,NAME) VALUES('8888','MARRY'); 
3.INSERT INTO TEST(NAME) VALUES('LISA'); 

    然后提交 commit;



    5、查看表数据

   



Html代码 
1.       ID      NAME 
2.1   1      JASON 
3.2   2      MARRY 
4.3      3      LISA 



    说明:示例引用了:new.ID的值,并且把test_seq.nextval的值直接赋予:new.ID,这样,无论是否为ID列提供值,这种技术都使得该列取自test_seq.nextval

猜你喜欢

转载自dannyhz.iteye.com/blog/2256127