mysql實現序列效果
一般使用序列(sequence)來處理主鍵字段,在mysql中是沒有序列的,但是mysql有提供了自增長(increment)來實現類似的目的,但也只是自增,而不能設定步長、開始索引、是否迴圈等,最重要的是一張表只能由乙個字段使用自增,但有的時候我們需要兩個或兩個以上的字段實現自增(單錶多字段自增),mysql本身是實現不了的,但我們可以用建立乙個序列表,使用函式來獲取序列的值
1. 新建序列表
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. 新增乙個序列
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
;
setvalue = 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
setcurrent_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)
notnull
, `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`
foreach row
begin
setnew.num1 = nextval(
'seq_test1_num1'
);
setnew.num2 = nextval(
'seq_test1_num2'
);
end
9. 最後測試自增效果
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 來實現類似的目的,但也只是自增,而不能設定步長 開始索引 是否迴圈等,最重要的是一張表只能由乙個字段使用自增,但有的時候我們需要兩個或兩個以上的字段實...