mysql identity 與sequence的區(qū)別 與 mysql 實(shí)現(xiàn) oracle sequence
Posted on 2013-07-19 21:39 云云 閱讀(2901) 評(píng)論(1) 編輯 收藏Sequence是數(shù)據(jù)庫(kù)系統(tǒng)的特性,有的數(shù)據(jù)庫(kù)有Sequence,有的沒(méi)有。比如Oracle、DB2、PostgreSQL數(shù)據(jù)庫(kù)有Sequence,MySQL、SQL Server、Sybase等數(shù)據(jù)庫(kù)沒(méi)有Sequence。
定義一個(gè)seq_test,最小值為10000,最大值為99999999999999999,從20000開(kāi)始,增量的步長(zhǎng)為1,緩存為20的循環(huán)排序Sequence。
Oracle的定義方法:
定義一個(gè)seq_test,最小值為10000,最大值為99999999999999999,從20000開(kāi)始,增量的步長(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ù)庫(kù)系統(tǒng)中的一個(gè)對(duì)象,可以在整個(gè)數(shù)據(jù)庫(kù)中使用,和表沒(méi)有任何關(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,所以要手寫(xiě)的,創(chuàng)建一張儲(chǔ)存sequence的表(tb_sequence),然后手動(dòng)插入一條數(shù)據(jù) ,最后自定義一個(gè)函數(shù)來(lái)處理要增長(zhǎng)的值。
minvalue 10000
maxvalue 99999999999999999
start with 20000
increment by 1
cache 20
cycle
order;
Sequence與indentity的基本作用都差不多。都可以生成自增數(shù)字序列。
Sequence是數(shù)據(jù)庫(kù)系統(tǒng)中的一個(gè)對(duì)象,可以在整個(gè)數(shù)據(jù)庫(kù)中使用,和表沒(méi)有任何關(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,所以要手寫(xiě)的,創(chuàng)建一張儲(chǔ)存sequence的表(tb_sequence),然后手動(dòng)插入一條數(shù)據(jù) ,最后自定義一個(gè)函數(shù)來(lái)處理要增長(zhǎng)的值。
1、創(chuàng)建表tb_sequence,用來(lái)存放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);
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;
select _nextval('userid');