mysql实现oracle的sequence

    xiaoxiao2021-12-14  17

    代码:

    DROP TABLE IF EXISTS sys_sequence;   CREATE TABLE sys_sequence (            NAME VARCHAR(50) NOT NULL,            current_value INT NOT NULL,            increment INT NOT NULL DEFAULT 1,            PRIMARY KEY (NAME)   ); 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 sys_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 sys_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 sys_sequence                      SET current_value = value                      WHERE name = seq_name;            RETURN currval(seq_name);   END   $   DELIMITER ; 

    调用方式:

    SELECT currval('student')  SELECT nextval('student')

    很完美?可是跟着大神做项目的时候,却从没见用过这种方式。一般都是表里加seq字段,在代码里加个同步锁,让其自增长。

    转载请注明原文地址: https://ju.6miu.com/read-964279.html

    最新回复(0)