1

Firebird で自動インクリメント列を持つ唯一の方法は、ジェネレーターをセットアップし、それをトリガーで使用することです。

H2 db には、それを行うための auto_increment および identity キーワードがあります。

最善の方法は何ですか?

Mysql も auto_increment を使用しますが、ccurrence の読み取りとテーブルのロックに問題がありますね。

ありがとうございました。

4

1 に答える 1

2

いいえ、同時読み取りとテーブル ロックの問題はありません。

各 RDBMS 固有の疑似キー機能を使用する利点は、RDBMS エンジンが ID 値の割り当てをアトミックに処理するため、同時クライアントが同じ ID 値を割り当てないことです。テーブル全体ではなく、内部IDカウンターの簡単なロックのみが必要です。

最善の方法は重要ではありません。使用している RDBMS が提供する機能を使用する必要があります。残念ながら、疑似キーは SQL:2003 まで ANSI SQL 標準で定義されていませんでした。その時までに、各ベンダーは独自の機能と構文を作成していました。

  • Oracle は、 FirebirdSEQUENCEオブジェクトのようなオブジェクトを使用します。GENERATORSEQUENCE
  • Microsoft SQL Server はIDENTITY列オプションとして使用します。
  • IBM DB2 と PostgreSQL はどちらもシーケンスをサポートしていますが、列にシーケンスから暗黙的に値を取得させる宣言的な魔法もあります。
  • MySQL は列オプションを使用し、 PostgreSQL との相互互換性を確保するためにAUTO_INCREMENT疑似データ型もサポートしています。SERIAL
  • SQLite は、整数の主キー列が自動インクリメントであると想定しています。

H2 が と の両方IDENTITYをサポートする場合AUTO_INCREMENT、おそらく、MySQL または Microsoft SQL Server から移行する人々にとって、より使い慣れたものになるでしょう。H2 はわかりませんが、両方の構文形式が同じ内部機能にアクセスしていると思います。

H2のドキュメントを見つけました。の両方に表示されIDENTITYAUTO_INCREMENTa を使用しSEQUENCEます。

于 2010-05-03T17:35:58.243 に答える