• 技术文章 >数据库 >mysql教程

    mysql如何实现自增序列

    醉折花枝作酒筹醉折花枝作酒筹2021-06-09 09:12:10转载109
    本篇文章给大家介绍一下mysql实现自增序列的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。

    1.创建sequence表

    CREATE TABLE `sequence` (
      `name` varchar(50) COLLATE utf8_bin NOT NULL COMMENT '序列的名字',
      `current_value` int(11) NOT NULL COMMENT '序列的当前值',
      `increment` int(11) NOT NULL DEFAULT '1' COMMENT '序列的自增值',
      PRIMARY KEY (`name`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

    2.创建–取当前值的函数

    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.创建–取下一个值的函数

    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.创建–更新当前值的函数

    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 ;

    5.测试添加实例 执行sql

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

    相关推荐:《mysql教程

    以上就是mysql如何实现自增序列的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:csdn,如有侵犯,请联系admin@php.cn删除
    专题推荐:mysql 自增序列
    上一篇:MySQL运行SQL文件时出现问题怎么办 下一篇:详细介绍mysql理论和基础知识
    第16期线上培训班

    相关文章推荐

    • net start mysql无法启动MySQL怎么办• MySQL如何进行安装部署• 解决mysql报错This function has none of DETERMINISTIC问题• Mysql8和mysql5.7的区别有哪些• MySQL运行SQL文件时出现问题怎么办• 取消thinkphp操作mysql的30秒时间限制

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网