資料庫 Sequence 設計

2021-08-31 21:06:00 字數 4033 閱讀 1305

a.首先得建一張用於存放sequence的表:tbl_sequence

-- ----------------------------

-- table structure for tbl_sequence

-- ----------------------------

drop table if exists `tbl_sequence`;

create table `tbl_sequence` (

`seq_name` varchar(50) not null comment '序列名稱',

`min_value` int(11) not null comment '最小值',

`max_value` int(11) not null comment '最大值',

`current_val` int(11) not null comment '當前值',

`increment_val` int(11) not null default '1' comment '步長',

primary key (`seq_name`)

) engine=myisam default charset=utf8;

b.在表裡插入一條sequence資料

-- ----------------------------

-- records of tbl_sequence

-- ----------------------------

insert into `tbl_sequence` values ('t_user_seq', '1', '999999999', '1', '1');

c.建立乙個 nextval 函式:

create function `nextval` (name varchar(50)) returns int (11)

begin

declare _cur int;

declare _maxvalue int; -- 接收最大值

declare _increment int; -- 接收增長步數

select

current_val,

max_value,

increment_val

into _cur,

_maxvalue,

_increment

from

tbl_sequence

where

seq_name = name;

update tbl_sequence -- 更新當前值

set current_val = _cur + increment_val

where

seq_name = name;

if (_cur + _increment > _maxvalue) then -- 判斷是否達到最大值

update tbl_sequence

set current_val = min_value

where

seq_name = name;

endif;

return _cur;

end;

d.測試

select nextval ('t_user_seq');
a.首先得建一張和場景一略有不同用於存放sequence的表:tbl_sequence

-- ----------------------------

-- table structure for tbl_sequence

-- ----------------------------

drop table if exists `tbl_sequence`;

create table `tbl_sequence` (

`seq_name` varchar(50) not null comment '序列名稱',

`min_value` int(11) not null comment '最小值',

`max_value` int(11) not null comment '最大值',

`current_val` int(11) not null comment '當前值',

`increment_val` int(11) not null default '1' comment '步長',

`return_type` varchar(64) default null comment '回歸型別',

`return_date` varchar(64) default null comment '回歸時間',

primary key (`seq_name`)

) engine=myisam default charset=utf8;

b.插入一條sequence資料

-- ----------------------------

-- records of tbl_sequence

-- ----------------------------

insert into `tbl_sequence` values ('t_user_seq', '1', '9', '2', '1', '%y%m%d', null);

c.建立乙個函式:nextval_2

create function `nextval_2`(name varchar(50)) returns int(11)

begin

declare _cur int;

declare _minvalue int; -- 接收最小值

declare _maxvalue int; -- 接受最大值

declare _increment int; -- 接收增長步長

declare _type varchar(64); -- 回歸型別

declare _date varchar(64); -- 回歸時間

declare _current_date varchar(64); -- 當前時間

select current_val, min_value, max_value, increment_val, return_type, return_date

into _cur,_minvalue , _maxvalue, _increment, _type, _date

from tbl_sequence where seq_name = name;

------ 此段為增加的部分 -----

if(_type is not null) then

set _current_date = date_format(now(),_type);

if(_current_date != _date or _date is null) then

set _cur = _minvalue;

set _date = _current_date;

end if;

end if;

-----------------------------

update tbl_sequence -- 更新當前值

set current_val = _cur + increment_val,

return_date = _date

where seq_name = name ;

if(_cur + _increment > _maxvalue) then -- 判斷是否達到最大值

update tbl_sequence

set current_val = min_value

where seq_name = name ;

end if;

return _cur;

end

d.測試

select nextval_2('t_user_seq')

資料庫中的Sequence

sequence是資料庫系統按照一定規則自動增加的數字序列。這個序列一般作為 主鍵 因為不會重複 沒有其他任何意義。sequence是資料庫系統的特性,有的資料庫有sequence,有的沒有。比如oracle db2 postgresql資料庫有sequence,mysql sql server s...

oracle資料庫 序列 sequence

乙個問題 在某張表中,存在乙個id列 整數 我們希望在新增記錄的時候,該列從1開始,自動的增長,怎麼處理?解決方式 oracle是利用 序列 sequence 來完成的。序列 sequence 介紹 oracle中,是通過使用序列 sequence 來處理自動增長列。1 可以為表中的列自動產生值。2...

Oracle資料庫中Sequence的用法

在oracle資料庫中,sequence等同於序列號,每次取的時候sequence會自動增加,一般會作用於需要按序列號排序的地方。1 create sequence 注釋 你需要有create sequence或create any sequence許可權 create sequence emp s...