首頁 > 資料庫 > mysql教程 > MySQL中使用序列Sequence的方式總結

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

WBOY
發布: 2022-09-13 18:01:45
轉載
3124 人瀏覽過

推薦學習: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
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板