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;
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那么繁琐。
,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; ##这样就把字段加在了最前面,
注意:如果给已经存在数据的一个表,添加自增字段,那添加成功后,这个自增字段就有相应的自增数据了,