今天想使用做一个单点登录系统的,使用的是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)