Sequence是數(shù)據(jù)庫系統(tǒng)的特性,有的數(shù)據(jù)庫有Sequence,有的沒有。比如Oracle、DB2、PostgreSQL數(shù)據(jù)庫有Sequence,MySQL、SQL Server、Sybase等數(shù)據(jù)庫沒有Sequence。
定義一個(gè)seq_test,最小值為10000,最大值為99999999999999999,從20000開始,增量的步長(zhǎng)為1,緩存為20的循環(huán)排序Sequence。
Oracle的定義方法:
create sequence seq_test
minvalue 10000
maxvalue 99999999999999999
start with 20000
increment by 1
cache 20
cycle
order;
Sequence與indentity的基本作用都差不多。都可以生成自增數(shù)字序列。
Sequence是數(shù)據(jù)庫系統(tǒng)中的一個(gè)對(duì)象,可以在整個(gè)數(shù)據(jù)庫中使用,和表沒有任何關(guān)系;indentity僅僅是指定在表中某一列上,作用范圍就是這個(gè)表。
一個(gè)表中可以有多個(gè)字段使用sequence字段
insert into temp(event_id,event_priority,event_status) values(sequence1.nextval, sequence1.nextval,sequence1.nextval);
mysql 實(shí)現(xiàn)sequence
由于mysql不帶sequence,所以要手寫的,創(chuàng)建一張儲(chǔ)存sequence的表(tb_sequence),然后手動(dòng)插入一條數(shù)據(jù) ,最后自定義一個(gè)函數(shù)來處理要增長(zhǎng)的值。
1、創(chuàng)建表tb_sequence,用來存放sequence值:
create table tb_sequence(name varchar(50) not null,current_value int not null,_increment int not null default 1, primary key(name));
2 手動(dòng)插入數(shù)據(jù):
insert into tb_sequence values('userid',100,2);
3、定義函數(shù) _nextval:
- DELIMITER //
- create function _nextval(n varchar(50)) returns integer
- begin
- declare _cur int;
- set _cur=(select current_value from tb_sequence where name= n);
- update tb_sequence
- set current_value = _cur + _increment
- where name=n ;
- return _cur;
- end;
檢驗(yàn)結(jié)果
select _nextval('userid');