mysql实现sequence多线程序列自增

浏览:1020 发布日期: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


评论(4 相关
回复 聚币网 2018-02-03
sequence表
回复 武胜 2018-03-26
这篇文章写得很好。
文章很好值得一看。
文章不错非常喜欢

发表评论

必填

选填

选填