17.00 - 17.05 - PRIMARY KEYまたはUNIQUE制約の追加および削除 - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQLデータ定義言語 詳細トピック

Product
Advanced SQL Engine
Teradata Database
Release Number
17.00
17.05
Release Date
2020年6月
Content Type
プログラミング リファレンス
Publication ID
B035-1184-170K-JPN
Language
日本語 (日本)
ALTER TABLE … ADD PRIMARY KEYまたはUNIQUE制約には、次の権限が必要です。
  • テーブルまたはそのデータベースに対するDROP TABLE権限
  • テーブルに対するINDEX権限
PRIMARY KEYおよびUNIQUE制約の追加および削除には、次のルールが適用されます。
  • 同じ列を固有プライマリ インデックス(UPI)として指定するPRIMARY KEYまたはUNIQUE制約を追加できます。
  • 同じ列を基本AMPインデックス(PA)として指定するPRIMARY KEYまたはUNIQUE制約を追加できます。
  • 同じ列を固有セカンダリ インデックス(USI)として指定するPRIMARY KEYまたはUNIQUE制約を追加できます。
  • 非プライマリ インデックス(NUPI)にすべてのパーティション列が含まれているか、パーティション列がまったくない場合、同じ列をNUPIとして指定するPRIMARY KEYまたはUNIQUE制約を追加できます。制約は、固有セカンダリ インデックスによって適用されます。
  • キュー テーブルの(キュー挿入タイムスタンプ)QITS列にPRIMARY KEYまたはUNIQUE制約を追加することはできません。
  • LOB列に対してPRIMARY KEYまたはUNIQUE制約を定義することはできません。
  • 名前なしのUNIQUE制約を削除するためには、DROP INDEX文を使用します。
  • 同じ列を固有プライマリ インデックス(UPI)として指定する名前付きのPRIMARY KEYまたはUNIQUE制約を削除できます。
  • 同じ列を基本AMPインデックス(PA)として指定する名前付きのPRIMARY KEYまたはUNIQUE制約を削除できます。

NUPIのあるテーブルへのPRIMARY KEYまたはUNIQUE制約の追加

非固有プライマリ インデックス(NUPI)のあるテーブルの場合、固有セカンダリ インデックス(USI)がプライマリ インデックスと同じ列セット上に明示的に定義されていないときには、PRIMARY KEYまたはUNIQUE制約のみをプライマリ インデックス列リストと同じ列セットに追加できます。PRIMARY KEYまたはUNIQUE制約は、プライマリ インデックス列リストを定義しているものと同じ列セット上に暗黙的にUSIを定義します。

システムによって列セット上にUSIが作成され、そのインデックスを使用してプライマリ インデックス列が固有であることを検証できるようになります。この代替手段は、NUPIを固有にするための一時的な対処法としてのみ使用するべきです。この方法でテーブルを変更すると、システムは警告メッセージを返し、SHOW TABLEリクエストから返されるCREATE TABLE SQLテキストは無効になります。

このときには直ちに、テーブルのプライマリ インデックスをNUPIからUPIに変更するために、MODIFY PRIMARY句を使用してテーブルを変更してください。NUPIに定義されたUSIは削除されます。これは、プライマリ インデックスの固有性を強制する上で不要になったためです。