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

 更新时间:2022年09月09日 16:01:48   作者:笨鸟先飞的菜鸟  
序列是一组整数如1,2,3,...为了在需要时生成的,这篇文章主要给大家介绍了关于MySQL中使用序列Sequence的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下

前言

在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中使用序列Sequence方式的文章就介绍到这了,更多相关MySQL使用序列Sequence内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Mysql修改datadir导致无法启动问题解决方法

    Mysql修改datadir导致无法启动问题解决方法

    这篇文章主要介绍了Mysql修改datadir导致无法启动问题解决方法,本文原因是SELINUX导致,用关闭SELINUX的方法解决了这个问题,需要的朋友可以参考下
    2015-02-02
  • 简单介绍MySQL中GROUP BY子句的使用

    简单介绍MySQL中GROUP BY子句的使用

    这篇文章主要介绍了简单介绍MySQL中GROUP BY子句的使用,是MySQL入门学习中的基础知识,需要的朋友可以参考下
    2015-05-05
  • MySQL 5.7增强版Semisync Replication性能优化

    MySQL 5.7增强版Semisync Replication性能优化

    这篇文章主要介绍了MySQL 5.7增强版Semisync Replication性能优化,本文着重讲解支持发送binlog和接受ack的异步化、支持在事务commit前等待ACK两项内容,需要的朋友可以参考下
    2015-05-05
  • MySQL replace into 语句浅析(一)

    MySQL replace into 语句浅析(一)

    这篇文章主要介绍了MySQL replace into 语句浅析(一),本文讲解了replace into的原理、使用方法及使用的场景和使用示例,需要的朋友可以参考下
    2015-05-05
  • mysql重复索引与冗余索引实例分析

    mysql重复索引与冗余索引实例分析

    这篇文章主要介绍了mysql重复索引与冗余索引,简单说明了重复索引与冗余索引的概念、应用场景并结合实例形式分析了mysql重复索引与冗余索引相关操作技巧,需要的朋友可以参考下
    2019-07-07
  • MySQL存储过程使用实例详解

    MySQL存储过程使用实例详解

    本文介绍关于在MySQL存储过程游标使用实例,包括简单游标使用与游标循环跳出等方法
    2013-11-11
  • mysql执行脚本导入表和数据后中文注释乱码的问题解决

    mysql执行脚本导入表和数据后中文注释乱码的问题解决

    本人在使用不同版本下进行操作时,就会出现中文乱码的问题,,例如我本地安装mysql8,服务器安装的是mysql5,然后本地连接服务器的mysql后,执行SQL脚本之后发现中文全部乱码,所以本文介绍了mysql执行脚本导入表和数据后中文注释乱码的问题解决,需要的朋友可以参考下
    2024-04-04
  • mysql数据库的分区表示例代码

    mysql数据库的分区表示例代码

    这篇文章主要介绍了mysql数据库的分区表的相关资料,文章介绍了两种创建SQL表分区的方法,分别是手动创建和使用MySQL的定时事件来自动创建分区,手动创建分区时,需要在代码中判断分区并新增,可能会引入一些问题,需要的朋友可以参考下
    2024-11-11
  • MYSQL数据库表结构优化方法详解

    MYSQL数据库表结构优化方法详解

    这篇文章主要介绍了MYSQL数据库表结构优化方法,总结分析了mysql针对表结构优化的数据类型选择、范式化操作、表的拆分等相关使用技巧,需要的朋友可以参考下
    2019-08-08
  • mysql 5.0.45 (修改)拒绝服务漏洞

    mysql 5.0.45 (修改)拒绝服务漏洞

    mysql 5.0.45 (修改)拒绝服务漏洞的方法,追求安全的朋友可以参考下。
    2010-07-07

最新评论