首頁  >  文章  >  資料庫  >  MySQL中使用序列Sequence的方式總結

MySQL中使用序列Sequence的方式總結

WBOY
WBOY轉載
2022-09-13 18:01:453011瀏覽

推薦學習: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中文網其他相關文章!

陳述:
本文轉載於:jb51.net。如有侵權,請聯絡admin@php.cn刪除