【IDENTITY】と【SEQUENCE】の違い
- IDENTITY:
自動でIDを割り振ふる仕組み - SEQUENCE:
手動でIDを割り振るための仕組み
スポンサードサーチ
IDENTITY と SEQUENCEの使いどころ
どちらもIDを発行するものですが、大きな違いは自動であるかどうかと言えます。
自動採番はIDENTITYになります。特にIDを意識しなくても良いときはIDENTITIYで充分でしょう。
反対にSEQUENCEは、事前にIdを知っておきたいときに便利です。
テーブルを作る際に子テーブルのIdを知っておきたいとか。また、採番するIdの値を、運用途中から任意のIdから始めるときにも便利です。
仕組み
次に仕組みについて見ていきましょう。
両者ともIDを採番するという行為は似ていますが、構造は全く違います。
IDENTITY
IDENTITYは、テーブルのカラムにくっついているイメージです。Id列を表すカラムに対して、始まりと増分を決めます。
create table [dbo].[User](
[Id] [bigint] IDENTITY(1,1) NOT NULL,
...)
SEQUENCE
SEQUENCEの場合は、テーブルとは全く別であり、IDを採番するための独立したシステムです。
シーケンスはテーブルとは全く別システムのため、例えば『UserテーブルのId専用のシーケンス』という名前だけをつけて設定しておきます。
スポンサードサーチ
Webと組み合わせたSEQUENCEの使い方の例
ここでは、シーケンスの作成と使い方の例を見ていきます。
シーケンスの作成
create sequence [dbo].[SQ_UserId]
AS [bigint]
start with 1
increment by 1
minvalue ...
maxvalue ...
cache
今回の例では、Userテーブル専用のシーケンスを表すため、『SQ_UserId』というシーケンス名を付けています。
先程も言いましたが、Userテーブルとシーケンスは全く紐づいていません。シーケンスはただただIdをカウントするだけです。今回のSQ_UserIdのシーケンスであれば、1から始まり、次取得した時には1だけ増えた2が取れます。
Webと組み合わせた例
では次に、使い方の例を見ていきましょう。
WebサーバーがDBのUserを追加する例を見ていきましょう。
- ①Webサーバー(今回は.net core C#)は、シーケンスSQ_UserIdから次のIdを取得
- ②UserのEntityにシーケンスから取得したIdをセット
- ③セットしたEntityでDBに対して更新をかけます
このような形で使われることが多いのではないでしょうか。
また、Webサーバーからシーケンスに対して次のIdを取得する時のクエリは
declare @nextId -- 変数
select @nextId = next value for [dbo].[SQ_UserId] --セット
select @nextId -- nextIdを表示
という形のクエリを投げれば、次のシーケンスのIdを取得することができます。
まとめ
今回はIDENTITIYとSEQUENCEについて説明しました。
- IDENTITY:
自動でIDを割り振ふる仕組み:
テーブルのカラムに紐づく - SEQUENCE:
手動でIDを割り振るための仕組み:
テーブルとは全く別システム
という事でした。
以上参考になれば幸いです。