今天想使用做一個單點登錄系統的,使用的是mysql數據庫,因為之前使用的是sqlserver數據庫,建完表之后返現沒有沒有序列,網上找了一下發現mysql是沒有提供
序列進行取值的。
那么mysql 想有一個類似SQL server的功能應該如何實現呢。
實現思路 建立一張表存放對應序列號的當前值 --》創建一個函數每去一次值則對應的序列號增加
如圖所示:
第一步;建立對應的表
CREATE TABLE seqUserloginInfo (
name VARCHAR(50) NOT NULL,
current_value INT NOT NULL,
increment INT NOT NULL DEFAULT 1,
PRIMARY KEY (name)
);

第二步.建立對應的函數(也可以是存儲過程)
1查詢函數
CREATE FUNCTION `currval`(seq_name VARCHAR(50)) RETURNS int(11)
BEGIN
DECLARE value int;
set value=0;
SELECT current_value INTO value FROM seqUserloginInfo where name=seq_name;
return value;
END
2.消耗一個序列
CREATE FUNCTION `nextval`(seq_name VARCHAR(50)) RETURNS int(11)
BEGIN
UPDATE seqUserloginInfo SET current_value = current_value + increment where name=seq_name ;
RETURN currval(seq_name);
END
3.消耗多個序列
CREATE FUNCTION `setval`(seq_name VARCHAR(50), value INTEGER) RETURNS int(11)
BEGIN
UPDATE seqUserloginInfo
SET current_value = value where name=seq_name;
RETURN currval(seq_name);
END

測試:
SELECT nextval('userlogininfo',10)
SELECT setval('userlogininfo',10)
