MySQL實現序列(Sequence)效果

2022-04-09 02:11:23 字數 2218 閱讀 7828

mysql實現序列效果

一般使用序列(sequence)來處理主鍵字段,在mysql中是沒有序列的,但是mysql有提供了自增長(increment)來實現類似的目的,但也只是自增,而不能設定步長、開始索引、是否迴圈等,最重要的是一張表只能由乙個字段使用自增,但有的時候我們需要兩個或兩個以上的字段實現自增(單錶多字段自增),mysql本身是實現不了的,但我們可以用建立乙個序列表,使用函式來獲取序列的值

1. 新建序列表

drop table if exists sequence;

create table sequence (

seq_name varchar(50) not null, -- 序列名稱

current_val int not null, -- 當前值

increment_val int not null default 1, -- 步長(跨度)

primary key (seq_name) );

2. 新增乙個序列

insert into sequence values ('seq_test1_num1', '0', '1');

insert into sequence values ('seq_test1_num2', '0', '2');

3. 建立 函式 用於獲取序列當前值(v_seq_name 引數值 代表序列名稱)

create function currval(v_seq_name varchar(50))

returns integer

begin

declare value integer;

set value = 0;

select current_val into value from sequence where seq_name = v_seq_name;

return value;

end;

4. 查詢當前值

select currval('seq_test1_num1');

5. 建立 函式 用於獲取序列下乙個值(v_seq_name 引數值 代表序列名稱)

create function nextval (v_seq_name varchar(50))

returns integer

begin

update sequence set current_val = current_val + increment_val where seq_name = v_seq_name;

return currval(v_seq_name);

end;

6. 查詢下乙個值

select nextval('seq_test1_num1');

7. 新建表 用於測試的表

drop table if exists `test1`;

create table `test1` (

`name` varchar(255) not null,

`value` double(255,0) default null,

`num1` int(11) default null,

`num2` int(11) default null,

primary key (`name`)

);8. 新建觸發器 插入新紀錄前給自增欄位賦值實現欄位自增效果

create trigger `tri_test1_num1` before insert on `test1` for each row begin

set new.num1 = nextval('seq_test1_num1');

set new.num2 = nextval('seq_test1_num2');

end9. 最後測試自增效果

insert into test1 (name, value) values ('1', '111');

insert into test1 (name, value) values ('2', '222');

insert into test1 (name, value) values ('3', '333');

insert into test1 (name, value) values ('4', '444');

10. 結果展示

select * from test1;

Oracle自動增長序列介紹 sequence

在oracle中sequence就是所謂的序列號,每次取的時候它會自動增加,一般用在需要按序列號排序的地方。1 create sequence 你首先要有create sequence或者create any sequence許可權,create sequence emp sequence incr...

MySQL實現序列

mysql實現序列效果 一般使用序列 sequence 來處理主鍵字段,在mysql中是沒有序列的,但是mysql有提供了自增長 increment 來實現類似的目的,但也只是自增,而不能設定步長 開始索引 是否迴圈等,最重要的是一張表只能由乙個字段使用自增,但有的時候我們需要兩個或兩個以上的字段實...

Mysql實現序列

mysql實現序列效果 一般使用序列 sequence 來處理主鍵字段,在mysql中是沒有序列的,但是mysql有提供了自增長 increment 來實現類似的目的,但也只是自增,而不能設定步長 開始索引 是否迴圈等,最重要的是一張表只能由乙個字段使用自增,但有的時候我們需要兩個或兩個以上的字段實...