zoukankan      html  css  js  c++  java
  • 给MySQL增加Sequence管理功能

    -- Sequence 管理表
    DROP TABLE IF EXISTS sequence;
    CREATE TABLE sequence (
             name VARCHAR(50) NOT NULL,
             current_value INT NOT NULL,
             increment INT NOT NULL DEFAULT 1,
             PRIMARY KEY (name)
    ) ENGINE=InnoDB;
     
    -- 取当前值的函数
    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 ;
    /*
    -- 测试
    INSERT INTO sequence VALUES ('TestSeq', 0, 1);
    SELECT SETVAL('TestSeq', 10);
    SELECT CURRVAL('TestSeq');
    SELECT NEXTVAL('TestSeq');
    */
  • 相关阅读:
    微信小程序订阅消息
    自动生成小学四则运算题目
    个人项目作业
    自我介绍+软工5问
    软件工程之获小黄衫感言
    2020软件工程个人作业06——软件工程实践总结作业
    2020软件工程作业05
    2020软件工程作业00——问题清单
    2020软件工程作业04
    2020软件工程作业03
  • 原文地址:https://www.cnblogs.com/smile361/p/3082182.html
Copyright © 2011-2022 走看看