Mysql實現序列

2021-08-15 19:30:43 字數 3711 閱讀 6251

mysql實現序列效果

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

1. 新建序列表

[sql] 

view plain

copy

drop

table

if exists 

sequence

;     

create

table

sequence

(         

seq_name        varchar

(50) 

notnull

, -- 序列名稱       

current_val     int

notnull

, -- 當前值       

increment_val   int

notnull

default

1, -- 步長(跨度)       

primary

key(seq_name)   );   

2. 新增乙個序列

[sql] 

view plain

copy

insert

into

sequence

values

('seq_test1_num1'

, '0'

, '1'

);  

insert

into

sequence

values

('seq_test1_num2'

, '0'

, '2'

);  

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

[sql] 

view plain

copy

create

function

currval(v_seq_name 

varchar

(50))     

returns

integer

begin

declare

value 

integer

;         

setvalue = 0;         

select

current_val 

into

value  

from

sequence

where

seq_name = v_seq_name;   

return

value;   

end;  

4. 查詢當前值

[sql] 

view plain

copy

select

currval(

'seq_test1_num1'

);  

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

[sql] 

view plain

copy

create

function

nextval (v_seq_name 

varchar

(50))  

returns

integer

begin

update

sequence

setcurrent_val = current_val + increment_val  

where

seq_name = v_seq_name;  

return

currval(v_seq_name);  

end;  

6. 查詢下乙個值

[sql] 

view plain

copy

select

nextval(

'seq_test1_num1'

);  

7. 新建表          用於測試的表

[sql] 

view plain

copy

drop

table

if exists `test1`;  

create

table

`test1` (  

`name

` varchar

(255) 

notnull

,  `value` double

(255,0) 

default

null

,  `num1` int

(11) 

default

null

,  `num2` int

(11) 

default

null

,  primary

key(`

name

`)  

);  

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

[sql] 

view plain

copy

create

trigger

`tri_test1_num1` before 

insert

on`test1` 

foreach row 

begin

setnew.num1 = nextval(

'seq_test1_num1'

);  

setnew.num2 = nextval(

'seq_test1_num2'

);  

end9. 最後測試自增效果

[sql] 

view plain

copy

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. 結果展示

MySQL實現序列

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

mysql實現自增序列

create table sequence name varchar 50 collate utf8 bin not null comment 序列的名字 current value int 11 not null comment 序列的當前值 increment int 11 not null d...

MySQL實現序列(Sequence)效果

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