[MySQL] realized from increasing function sequence

Foreword

The current database is: mysql
due mysql and oracle are not the same, do not support direct sequence, so you need to create a table to simulate the sequence of functions on the grounds sql statement is as follows:

step

1. Create a sequence table

CREATE TABLE `sequence` (
  name` ` VARCHAR ( 50 ) the COLLATE utf8_bin the NOT  NULL the COMMENT ' name sequence ' ,
  current_value` ` int ( . 11 ) the NOT  NULL the COMMENT ' current value of the sequence ' ,
  increment` ` int ( . 11 ) the NOT  NULL  the DEFAULT  ' . 1 ' the COMMENT ' from the value sequence ' ,
   a PRIMARY  KEY (` name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

2. Create function takes the current value

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 sequence
          WHERE name = seq_name; 
     RETURN value; 
END
$ 
DELIMITER ; 

3. Create a value function Remove

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

4. Create a function to update the current value

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

Database structure

 

 transfer

The INSERT  the INTO sequence the VALUES ( ' testSeq ' , 0 , . 1 ); - adding a sequence name and the initial value, and from an increase of

The SELECT SETVAL ( ' testSeq ' , 10 ); - setting an initial value of the specified sequence

The SELECT CURRVAL ( ' testSeq ' ); - query the current value of the specified sequence

The SELECT a NEXTVAL ( ' testSeq ' ); - Query sequence designated next value

Guess you like

Origin www.cnblogs.com/jxd283465/p/11645752.html