当前位置:首页 > 数据库 > 正文内容

MySQL中使用序列Sequence的方式总结

Lotus2022-10-07 10:36数据库

程序员必备接口测试调试工具:立即使用
Apipost = Postman + Swagger + Mock + Jmeter
Api设计、调试、文档、自动化测试工具
后端、前端、测试,同时在线协作,内容实时同步

推荐学习:mysql视频教程

在Oracle数据库中若想要一个连续的自增的数据类型的值,可以通过创建一个sequence来实现。而在MySQL数据库中并没有sequence。通常如果一个表只需要一个自增的列,那么我们可以使用MySQL的auto_increment(一个表只能有一个自增主键)。若想要在MySQL像Oracle中那样使用序列,我们该如何操作呢?

例如存在如下表定义:

create table `t_user`(
    `id` bigint auto_increment primary key,
    `user_id` bigint unique comment '用户ID',
    `user_name` varchar(10) not null default '' comment '用户名'
);
登录后复制

其中user_id要求自增有序且唯一。实现方式有很多比如雪花算法、使用Redis或者Zookeeper等都可以获取一个满足条件的值,这里就不一一介绍。这里介绍使用MySQL的auto_increment和last_insert_id()来实现类似Oracle中的序列的方式。

方式一、使用存储过程

一、创建一个包含自增主键的简单表。

示例如下:

create table `t_user_id_sequence` (
    `id` bigint not null auto_increment primary key,
    `t_text` varchar(5) not null default '' comment 'insert value'
);
登录后复制

二、创建一个存储过程

delimiter &&
create procedure `pro_user_id_seq` (out sequence bigint)
begin
    insert into t_user_id_sequence (t_text) values ('a');
    select last_insert_id() into sequence from dual;
    delete from t_user_id_sequence;
end &&
delimiter ;
登录后复制

三、测试

call pro_user_id_seq(@value);
select @value from dual;
登录后复制

使用存储过程的方式需要调用一次存储过程再进行赋值,稍微有点麻烦。

方式二、使用function

一、创建一个生成sequence的函数

delimiter &&
create function user_id_seq_func() returns bigint
begin
    declare sequence bigint;
    insert into t_user_id_sequence (t_text) values ('a');
    select last_insert_id() into sequence from dual;
    delete from t_user_id_sequence;
    return sequence;
end &&
delimiter ;
登录后复制

二、测试

select user_id_seq_func() from dual;
 
insert into t_user (user_id, user_name) values (user_id_seq_func(), 'java');
select * from t_user;
登录后复制

推荐学习:mysql视频教程

以上就是MySQL中使用序列Sequence的方式总结的详细内容,更多请关注php中文网其它相关文章!

原文链接

扫描二维码推送至手机访问。

版权声明:本文来源于网络,仅供学习,如侵权请联系站长删除。

本文链接:https://news.layui.org.cn/post/354.html

分享给朋友:
返回列表

上一篇:一文聊聊Mysql锁的内部实现机制

没有最新的文章了...

“MySQL中使用序列Sequence的方式总结” 的相关文章

Redis主从复制分步讲解使用

本篇文章给大家带来了关于redis的相关知识,其中主要介绍了关于主从复制的相关内容,Redis因为其高性能和易用性在我们后端的服务中发挥了巨大的作用,并且很多重要功能的实现都会依赖redis,下面一起来看一下,希望对大家有帮助。 千万级数据并发如何处理?进入学习 推荐学习:Redis视频教程 主服务器(master)启用二进制日志 选择一个唯一的server-id 创建具有复制权限的用户 从服务器...

一文了解Redis源码设计剖析之事件处理

本篇文章给大家带来了关于redis的相关问题,其中主要介绍了关于事件处理示例的相关内容,包括了redis事件介绍、事件的抽象以及事件的实现等内容,下面一起来看一下,希望对大家有帮助。 千万级数据并发如何处理?进入学习 推荐学习:Redis视频教程 1. Redis事件介绍 Redis服务器是一个事件驱动程序,所谓事件驱动就是输入一条命令并且按下回车,然后消息被组装成Redis协议的格式发送给Red...

MySQL怎么优化性能?优化技巧分享

程序员必备接口测试调试工具:立即使用 Apipost = Postman + Swagger + Mock + Jmeter Api设计、调试、文档、自动化测试工具 后端、前端、测试,同时在线协作,内容实时同步 当谈到数据库性能优化时,最重要的事情就是选择正确的。你应该决定你的应用程序是需要关系型数据库还是非关系型数据库。即使在一种类型中,你也将有多种选择。 与关系数...

MySQL慢查询日志实操(图文解析)

本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了mysql慢查询日志轮转_MySQL慢查询日志实操,MySQL的慢查询日志是MySQL提供的一种日志记录,下面一起来看一下,希望对大家有帮助。 程序员必备接口测试调试工具:立即使用 Apipost = Postman + Swagger + Mock + Jmeter Api设计、调试、文档、自动化测试工具...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。