MySQL實現序列(Sequence)效果


MySQL實現序列效果

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

下面是sql腳本,僅供參考

--創建序列化表
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) );

--准備兩條數據插入到表中
INSERT INTO sequence VALUES ('seq_test1_num1', '0', '1');
INSERT INTO sequence VALUES ('seq_test1_num2', '0', '2');

--創建查詢當前值函數
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;

--執行當前值函數
select currval('seq_test1_num2');

--創建下一個值並更新(利用步進)
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;

--執行下一個值函數
select nextval('seq_test1_num2');

--創建設定特定值函數
create function setval (v_seq_name VARCHAR(50), value INTEGER)
returns integer
begin
UPDATE sequence SET current_val = value WHERE seq_name = v_seq_name;
RETURN currval(v_seq_name);
end;

--執行設定特定值函數
select setval('seq_test1_num2',99);


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM