zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

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

mysql序列 使用 方式 总结 sequence
2023-06-13 09:20:03 时间

在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、ORACLE、SQLSERVER、MongoDB、PostgreSQL 、程序问题
服务方式:远程服务、电话支持、现场服务,沟通指定方式服务
技术标签:数据恢复、安装配置、数据迁移、集群容灾、异常处理、其它问题

本站部分文章参考或来源于网络,如有侵权请联系站长。
数据库远程运维 MySQL中使用序列Sequence的方式总结