mysql添加sequence 自增序列

-- 取當前值的函數
DROP FUNCTION IF EXISTS currval;
DELIMITER $
CREATE FUNCTION currval (seq_name VARCHAR(50))
        RETURNS INTEGER
        LANGUAGE SQL
        DETERMINISTIC
        CONTAINS SQL
        SQL SECURITY DEFINER
        COMMENT ''
BEGIN
        DECLARE value INTEGER;
        SET value = 0;
        SELECT current_value INTO value
                FROM sequence
                WHERE name = seq_name;
        RETURN value;
END
$
DELIMITER ;
-- 取下一個值的函數
DROP FUNCTION IF EXISTS nextval;
DELIMITER $
CREATE FUNCTION nextval (seq_name VARCHAR(50))
        RETURNS INTEGER
        LANGUAGE SQL
        DETERMINISTIC
        CONTAINS SQL
        SQL SECURITY DEFINER
        COMMENT ''
BEGIN
        UPDATE sequence
                SET current_value = current_value + increment
                WHERE name = seq_name;
        RETURN currval(seq_name);
END
$
DELIMITER ;
-- 更新當前值的函數
DROP FUNCTION IF EXISTS setval;
DELIMITER $
CREATE FUNCTION setval (seq_name VARCHAR(50), value INTEGER)
        RETURNS INTEGER
        LANGUAGE SQL
        DETERMINISTIC
        CONTAINS SQL
        SQL SECURITY DEFINER
        COMMENT ''
BEGIN
        UPDATE sequence
                SET current_value = value
                WHERE name = seq_name;
        RETURN currval(seq_name);
END
$
DELIMITER ;

插入sequence表:sql

-- ----------------------------
-- Table structure for sequence
-- ----------------------------
DROP TABLE IF EXISTS `sequence`;
CREATE TABLE `sequence` (
  `name` varchar(50) COLLATE utf8_bin NOT NULL,
  `current_value` bigint(20) NOT NULL,
  `increment` int(11) NOT NULL DEFAULT '1',
  PRIMARY KEY (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
相關文章
相關標籤/搜索