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 count(1)、count(*)、count(字段)的区别
COUNT在数据库行数统计中被广泛使用,那么你知道MySQL count(1)、count(*)、count(字段)的区别吗,本文就想的介绍一下,感兴趣的可以了解一下2021-12-12Mysql错误:Too many connections的解决方法
这篇文章主要给大家介绍了关于Mysql错误Too many connections的解决方法,文中通过示例代码介绍的非常详细,对大家学习或者使用Mysql具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧2019-06-06MySQL 撤销日志与重做日志(Undo Log与Redo Log)相关总结
这篇文章主要介绍了MySQL 撤销日志与重做日志(Undo Log与Redo Log)相关总结,帮助大家更好的理解和学习使用MySQL,感兴趣的朋友可以了解下2021-03-03MySQL中CREATE DATABASE语句创建数据库的示例
在MySQL中,可以使用CREATE DATABASE语句创建数据库,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2023-09-09
最新评论