分享

自己实现mysql的sequence

 明神月 2019-05-05

摘自:https://www.runoob.com/mysql/mysql-using-sequences.html

第一步:创建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;

第二步:创建取当前值的函数 currval

DROP FUNCTION IF EXISTS currval; DELIMITER $ 
CREATE FUNCTION currval (seq_name VARCHAR(50)) RETURNS INTEGER
LANGUAGE SQL 
DETERMINISTIC 
CONTAINS SQL 
SQL SECURITY DEFINER 
COMMENT ''BEGINDECLARE value INTEGER; SET value = 0; SELECT current_value INTO value 
FROM sequence
WHERE name = seq_name; RETURN value; END$ 
DELIMITER ;

第三步:创建取下一个值的函数 nextval

DROP FUNCTION IF EXISTS nextval; DELIMITER $ 
CREATE FUNCTION nextval (seq_name VARCHAR(50)) RETURNS INTEGER
LANGUAGE SQL 
DETERMINISTIC 
CONTAINS SQL 
SQL SECURITY DEFINER 
COMMENT ''BEGINUPDATE sequence
SET current_value = current_value + increment 
WHERE name = seq_name; RETURN currval(seq_name); END$ 
DELIMITER;

第四步:创建更新当前值的函数 setval

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 ''BEGINUPDATE sequence
SET current_value = value 
WHERE name = seq_name; RETURN currval(seq_name); END$ 
DELIMITER ;

测试函数功能

当上述四步完成后,可以用以下数据设置需要创建的sequence名称以及设置初始值和获取当前值和下一个值。

INSERT INTO sequence VALUES ('TestSeq', 0, 1);----添加一个sequence名称和初始值,以及自增幅度  添加一个名为TestSeq 的自增序列SELECT SETVAL('TestSeq', 10);---设置指定sequence的初始值    这里设置TestSeq 的初始值为10SELECT CURRVAL('TestSeq');  --查询指定sequence的当前值   这里是获取TestSeq当前值SELECT NEXTVAL('TestSeq');  --查询指定sequence的下一个值  这里是获取TestSeq下一个值

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多