首页 > 数据库技术 > 详细

oracle和mysql设置自增字段

时间:2015-07-23 02:15:08      阅读:298      评论:0      收藏:0      [点我收藏+]
Oracle:
把表he的id列设成自增的。
1创建测试表:
create table HE
(
  id   INT,
  name VARCHAR2(40),
  sex  VARCHAR2(10)
)
(1)建立sequence
 create sequence he_seq 
increment by 1   
start with 1 
nomaxvalue 
nominvalue 
nocache 
(2)建立触发器
create or replace trigger tri_he_id
before insert on  he
for each row
declare  
nextid number;             --定义一个变量  名字为 nextid  
begin
select  he_seq.nextval          --he_seq.nextval表示取序列he_seq的增加之后的值,
into nextid  from dual;         --选出序列的值给变量nextid  
:new.id:=nextid;               --把变量 nextid 的值赋给  he表的id列,固定格式   :new.列名:
 end tri_he_id;
3,测试;
SQL> insert into he (name,sex) values(‘liuwenhe‘,‘m‘);
1 row created.
SQL> insert into he (name,sex) values(‘dashuai‘,‘m‘);
1 row created.
SQL> commit;
Commit complete.
SQL> select * from he;
        ID NAME                                     SEX
---------- ---------------------------------------- ----------
         1 liuwenhe                                 m
         2 dashuai                                   m

对sequence说明
increment by  用于指定序列增量,默认值 1,如果指定的是正整数,则序列号自动递增,
如果指定的是负数,则自动递减。 
start with  用于指定序列生成器生成的第一个序列号?当序列号顺序递增时默认值为序列
号的最小值 当序列号顺序递减时默认值为序列号的最大值。 
Maxvalue:用于指定序列生成器可以生成的组大序列号,必须大于或等于start with并且
必须大于minvalue,默认为nomaxvalue。 
Minvalue:用于指定序列生成器可以生成的最小序列号,必须小于或等于starr with并且
必须小于maxvalue,默认值为nominvalue。 
Cycle:用于指定在达到序列的最大值或最小值之后是否继续生成序列号,默认为nocycle。 
Cache:用于指定在内存中可以预分配的序列号个数,默认值20。 
在sequence中应注意? 
1、 第一次NEXTVAL返回的是初始值,随后的NEXTVAL会自动增加你定义的INCREMENT BY
值,然后返回增加后的值。CURRVAL 总是返回当前SEQUENCE的值,但是在第一次NEXTVAL
初始化之后才能使用CURRVAL,否则会出错。一次NEXTVAL会增加一次SEQUENCE的值,所以
如果你在同一个语句里面使用多个NEXTVAL?其值就是不一样的。 
2、 如果指定CACHE值,ORACLE就可以预先在内存里面放置一些sequence?这样存取的快些。
cache里面的取完后,oracle自动再取一组到cache。 使用cache或许会跳号, 比如数据
库突然不正常down掉(shutdown abort),cache中的sequence就会丢失. 所以可以在create 
sequence的时候用nocache防止这种情况。


 MySQL:mysql有自增字段的类型(auto_increment),不必要像oracle那么繁琐。
create table test(id int(3)
 auto_incrementprimary key
,tname char(10));
注意自增的字段必须是唯一建,不加唯一索引,不行,不一定是主键
mysql>alter table Product_0630_bak  add id int(11) auto_increment  unique key;  ##这样就把字段加在了最后,
mysql> alter table Product_0630_bak  add id int(11) auto_increment  unique key   first;  ##这样就把字段加在了最前面,
注意:如果给已经存在数据的一个表,添加自增字段,那添加成功后,这个自增字段就有相应的自增数据了,







    












oracle和mysql设置自增字段

原文:http://blog.itpub.net/29654823/viewspace-1742260/

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!