【IDENTITY】と【SEQUENCE】の違い

SQL Web

  • 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を割り振るための仕組み:
    テーブルとは全く別システム

という事でした。
以上参考になれば幸いです。