zoukankan      html  css  js  c++  java
  • 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浏览器兼容问题
    jsN位字母数字混合验证码
    js将数字变成数组
    JS跟随鼠标移动的提示框
    Grand Central Dispatch(GCD)编程基础
    C#学习之修饰符
    .NET 开源项目介绍及资源推荐:单元测试
    万般皆LINQ
    .NET 开源项目介绍及资源推荐:IOC容器篇
    Type.GetType(string typeName) returns null !?
  • 原文地址:https://www.cnblogs.com/buoge/p/4165629.html
Copyright © 2011-2022 走看看