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');
    */
  • 相关阅读:
    面向过程, 面向对象, 类和对象, 类与数据类型
    python函数
    简单的登录注册函数
    Java遍历包中所有类
    spring boot jar启动
    过期算法
    负载均衡算法
    spring boot druid mybatis多数据源
    多线程wait和notify实现1212
    多线程售票
  • 原文地址:https://www.cnblogs.com/smile361/p/3082182.html
Copyright © 2011-2022 走看看