MySQL實現序列自增


#創建序列表
DROP TABLE IF EXISTS `sequence`;
CREATE TABLE `sequence` (
  `name` varchar(50) NOT NULL COMMENT '序列名稱',
  `current_value` bigint(20) NOT NULL COMMENT '序列當前值',
  `increment` int(11) NOT NULL DEFAULT '1' COMMENT '步長',
  PRIMARY KEY (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 comment '序列表';


#查詢序列當前值
DELIMITER $$
CREATE #DEFINER=`root`@`%` 
    FUNCTION `currval`(seq_name VARCHAR(50)) RETURNS bigint(20)
    DETERMINISTIC
BEGIN
        DECLARE value VARCHAR(20);
        SET value = 0;
        SELECT current_value INTO value 
            FROM sequence 
            WHERE name = seq_name;
        RETURN value;
END$$
DELIMITER ;


#取下一個序列號
DELIMITER $$
CREATE #DEFINER=`root`@`%` 
    FUNCTION `nextval`(seq_name VARCHAR(50)) RETURNS bigint(20)
    DETERMINISTIC
BEGIN
        UPDATE sequence
            SET current_value = current_value + increment
            WHERE name = seq_name;#更新序列號
        RETURN currval(seq_name);#取當前序列號
END$$
DELIMITER ;


#為序列賦值(初始化序列)
DELIMITER $$
CREATE #DEFINER=`root`@`%` 
    FUNCTION `setval`(seq_name VARCHAR(50), value BIGINT) RETURNS bigint(20)
    DETERMINISTIC
BEGIN
        #初始化更新
        UPDATE sequence
            SET current_value = value
            WHERE name = seq_name;
        #返回序列當前值
        RETURN currval(seq_name);
END$$
DELIMITER ;

 


免責聲明!

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



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