ITPub博客

首页 > 数据库 > Oracle > oracle和mysql设置自增字段

oracle和mysql设置自增字段

原创 Oracle 作者:贺子_DBA时代 时间:2015-07-20 17:03:02 1 删除 编辑
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;  ##这样就把字段加在了最前面,
注意:如果给已经存在数据的一个表,添加自增字段,那添加成功后,这个自增字段就有相应的自增数据了,







    












来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29654823/viewspace-1742260/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
10年数据库管理员从业经历,熟悉Oracle、mysql、tidb、oceanbase、redis、 mongodb 、python等技术栈,持有11g ocm 、mysql 5.7 ocp 、tidb 5.0 ptcp、tidb 6.0 ptca、oceanbase obcp等

注册时间:2014-05-12

  • 博文量
    327
  • 访问量
    2149040