ホームページ  >  記事  >  データベース  >  MySQLでのシーケンス Sequenceの使い方まとめ

MySQLでのシーケンス Sequenceの使い方まとめ

WBOY
WBOY転載
2022-09-13 18:01:453060ブラウズ

推奨学習: mysql ビデオ チュートリアル

Oracle データベースで継続的に自己増加するデータ型の値が必要な場合は、シーケンスを作成することで実現できます。 MySQL データベースにはシーケンスがありません。通常、テーブルに自動インクリメント カラムが 1 つだけ必要な場合は、MySQL の auto_increment を使用できます (テーブルには自動インクリメント主キーが 1 つだけあります)。 Oracle のような MySQL でシーケンスを使用したい場合、どうすればよいでしょうか?

たとえば、次のテーブル定義があります:

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 と同様のシーケンスを実装する方法を紹介します。

方法 1. ストアド プロシージャを使用する

1. 自動インクリメントする主キーを含む単純なテーブルを作成します。

例は次のとおりです:

create table `t_user_id_sequence` (
    `id` bigint not null auto_increment primary key,
    `t_text` varchar(5) not null default '' comment 'insert value'
);

2. ストアド プロシージャを作成します

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 ;

3. Test

call pro_user_id_seq(@value);
select @value from dual;

ストアド プロシージャを使用するには、次のことを行う必要があります。ストアドプロシージャを一度呼び出してから代入するのは少し面倒です。

方法 2. 関数を使用する

1. シーケンスを生成する関数を作成します

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 ;

2. テスト

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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はjb51.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。