首頁 > 軟體

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

2022-09-12 18:02:15

前言

在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內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com