1. 程式人生 > >MySql 生成類似於Oracle Seq 序列

MySql 生成類似於Oracle Seq 序列

CREATE TABLE `sys_sequence` (
   `NAME` varchar(50) NOT NULL,
   `CURRENT_VALUE` int(6) NOT NULL DEFAULT '0',
   `INCREMENT` int(6) NOT NULL DEFAULT '1',
   PRIMARY KEY (`NAME`)
 )

第一步建立一張序列表 用來存入不同名稱的序列 

NAME 序列名稱

CURRENT_VALUE 初始值

INCREMENT 步進值

INSERT INTO SYS_SEQUENCE(NAME,CURRENT_VALUE,INCREMENT) VALUES('seq_test', 1,1);//插入值

建立一個查詢當前序列值的函式 

DELIMITER $$
 
DROP FUNCTION IF EXISTS `currval`$$
 
CREATE FUNCTION `currval`(seq_name VARCHAR(50)) RETURNS INT(11)
BEGIN
DECLARE VALUE INTEGER;
SET VALUE=0;
SELECT current_value INTO VALUE
FROM sys_sequence 
WHERE NAME=seq_name;
RETURN VALUE;
END$$
 
DELIMITER ;

 查詢當前測試序列的值

select currval('seq_test');

 建立一個獲取序列下個值函式

    就是當前的值+步進值重新 set給當前值並返回資料


DELIMITER $$
DROP FUNCTION IF EXISTS `nextval`$$
 
CREATE FUNCTION `nextval`(seq_name varchar(50)) RETURNS int(6)
BEGIN
UPDATE sys_sequence
SET CURRENT_VALUE = CURRENT_VALUE + INCREMENT
where name=seq_name;
return currval(seq_name);
END$$

 查詢下一個序列的值

select nextval('seq_test')