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...