• Mysql存储过程 —— SEQUENCE的实现


    http://blog.csdn.net/crazylaa/article/details/5368447

    创建sql语句:

    DROP TABLE IF EXISTS sequence;

    -- 建sequence表,指定seq列为无符号大整型,可支持无符号值:0(default)到18446744073709551615(0到2^64–1)。
    CREATE TABLE sequence (
    name VARCHAR(50) NOT NULL,
    current_value BIGINT UNSIGNED NOT NULL DEFAULT 0,
    increment INT NOT NULL DEFAULT 1,
    PRIMARY KEY (name) -- 不允许重复seq的存在。
    ) ENGINE=InnoDB;


    DELIMITER /

    DROP FUNCTION IF EXISTS currval /

    CREATE FUNCTION currval(seq_name VARCHAR(50))
    RETURNS BIGINT
    BEGIN
    DECLARE value BIGINT;
    SELECT current_value INTO value
    FROM sequence
    WHERE upper(name) = upper(seq_name); -- 大小写不区分.
    RETURN value;
    END;
    /

    DELIMITER ;


    DELIMITER /

    DROP FUNCTION IF EXISTS nextval /

    CREATE FUNCTION nextval (seq_name VARCHAR(50))
    RETURNS BIGINT
    BEGIN
    DECLARE value BIGINT;
    UPDATE sequence
    SET current_value = current_value + increment
    WHERE upper(name) = upper(seq_name);
    RETURN currval(seq_name);
    END;
    /

    DELIMITER ;

    DELIMITER /

    DROP FUNCTION IF EXISTS setval /

    CREATE FUNCTION setval (seq_name VARCHAR(50), value BIGINT)
    RETURNS BIGINT
    BEGIN
    UPDATE sequence
    SET current_value = value
    WHERE upper(name) = upper(seq_name);
    RETURN currval(seq_name);
    END;
    /

    DELIMITER ;

    测试demo:

    创建序列,往sequence表插入值即可:
    mysql> insert into sequence set name='myseq';
    查看当前已建序列:
    mysql> select * from sequence;
    +-------+---------------+-----------+
    | name | current_value | increment |
    +-------+---------------+-----------+
    | myseq | 0 | 1 |
    +-------+---------------+-----------+
    1 row in set (0.00 sec)
    获得序列的下一个值,第一次使用,因此值为1:
    mysql> select nextval('myseq');
    +------------------+
    | nextval('myseq') |
    +------------------+
    | 1 |
    +------------------+
    1 row in set (0.00 sec)

  • 相关阅读:
    js在线压缩网址
    java 排序
    java访问权限(子类继承父类的方法)
    重庆大学第八届编程大赛初赛1、2题目
    重庆大学oj系统——习题
    种花问题(Can Place Flowers)——两朵花不能相邻
    TFIDF计算
    python自定义聚合函数,merge与transform的区别
    AFM模型 pytorch示例代码
    python计算信息增益
  • 原文地址:https://www.cnblogs.com/buoge/p/4165629.html
Copyright © 2020-2023  润新知