mysql实现sequence多线程序列自增

浏览:1508 发布日期:2017/07/10 分类:php 关键字:

     在mysql里,没有sequence,sequence是什么呢,什么情况下能使用?

sequence的作用主要是做表的序列用,一般做自动生成编号的序列,自动生成编号是在打开页面时候就开始调用mysql里的序列,并且实现自增1。为什么要在访问的时候就形成了序列了呢?

这个也是根据业务需求来定的,如果用户是多用户多态电脑同时登录、同事创建记录,若使用是mysql数据库自带的 数字主键加1的方式,那么会照成序列号相同的情况。sequence是为了实现多线程序列的基础。

下面是创建sequence表的方法和代码。


DROP TABLE IF EXISTS bwwl_sequence; 
CREATE TABLE bwwl_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 bwwl_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 bwwl_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 bwwl_sequence
          SET current_value = VALUE 
          WHERE NAME = seq_name; 
     RETURN currval(seq_name); 
END
$ 
DELIMITER ; 


INSERT INTO bwwl_sequence VALUES ('TestSeq', 0, 1);

SELECT SETVAL('TestSeq', 1);

SELECT CURRVAL('TestSeq');

SELECT NEXTVAL('TestSeq')


本文为原创:如需转载请加上本文连接,谢谢!

本文链接  http://maotouying.org/index.php/post/35.html

作者QQ: 770637705


评论(22 相关
回复 聚币网 2018-02-03
sequence表
回复 武胜 2018-03-26
这篇文章写得很好。
文章很好值得一看。
文章不错非常喜欢
博主分享的不错的啦,学习了不少,文章很好收获很大
文章不错 点赞支持一下
文章不错 支持一下 点赞
很好 支持下学习到了
非常不错 很好的网站
内容精彩 学习到了
很好 内容精彩 值得学习分享下
很好 值得学习分享 学习到了
不错 支持下 学习到了
内容精彩 值得学习分享 不错
内容精彩 值得学习分享下
非常精彩 值得学习 不错
很好 支持下 学习了
非常不错 精彩 支持下
很好 支持下
很好 学习了 支持下
非常不错 学习到了
很好 学习了 不错

发表评论

必填

选填

选填