MODIFY PRIMARY句に関する一般的なルール - Advanced SQL Engine - Teradata Database

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

Product
Advanced SQL Engine
Teradata Database
Release Number
17.05
17.00
Published
2020年6月
ft:locale
ja-JP
ft:lastEdition
2021-03-30
dita:mapPath
ja-JP/jpx1556733107962.ditamap
dita:ditavalPath
ja-JP/jpx1556733107962.ditaval
dita:id
B035-1184
Product Category
Software
Teradata Vantage
MODIFY PRIMARY INDEX句またはMODIFY PRIMARY AMP INDEX句については、次のルールを参照してください。パーティション式については、テーブルのパーティション変更に関するルールを参照してください。
  • テーブルのプライマリ インデックスまたは基本AMPインデックスの構成列を変更する場合は、MODIFY PRIMARY INDEXまたはMODIFY PRIMARY AMP INDEXを指定する必要があります。

    テーブルのパーティションのみを変更する場合は、PRIMARY INDEXまたはPRIMARY AMP INDEXを指定せずに、MODIFYのみを指定します。

  • ALTER TABLE文を使用して、以下のデータベース オブジェクトのプライマリ インデックスまたは基本AMPインデックスを変更することはできません。
    • グローバル一時テーブル
    • 揮発テーブル
    • 結合インデックス
    • ハッシュ インデックス
  • テーブルのプライマリ インデックス、基本AMPインデックス、またはパーティションの変更と他のテーブルの定義の変更を1つのALTER TABLE文で実行することはできません。これらの操作は相互に排他的です。
  • プライマリ インデックスまたは基本AMPインデックスのあるテーブルを変更して、異なるセットのプライマリ インデックス列または基本AMPインデックス列を含めることはできません。
  • テーブルを変更して固有のプライマリ インデックスを付ける場合に、同じ列セットに基づく固有のセカンダリ インデックスが現時点で存在すれば、データベースは、その固有のセカンダリ インデックスを自動的に削除します。
  • 1つ以上の指定したオプションで、プライマリ インデックスの定義を変更しなければなりません。そうしなければ、システムはエラーを返します。

    既存のパーティション テーブルまたは結合インデックスでの別のパーティション式の指定は、その新しい式の結果が前のパーティション式によって作成された結果と同じであっても、変更と見なされます。

  • プライマリ インデックスまたは基本AMPインデックスの列セットを指定しない場合、プライマリ インデックスまたは基本AMPインデックスの既存の列セットが保持されます。
  • 変更結果のプライマリ インデックスまたは基本AMPインデックスが固有の場合、および同じ列セットに既存のUSIもある(定義が明示的か暗黙的かに関係なく)場合、USIおよび関連するすべてのPRIMARY KEYまたはUNIQUE制約は冗長なため、削除されます。
  • 変更結果のプライマリ インデックスが固有ではなく、変更前のプライマリ インデックスがPRIMARY KEY制約またはUNIQUE制約によって暗黙的に定義されていた場合、その制約は削除されます。
  • 以下のデータ型の列で、テーブルまたは結合インデックスのプライマリ インデックス、基本AMPインデックスまたはパーティション式を定義することはできません。
    • BLOB
    • CLOB
    • JSON
    • XML
    • PERIOD
    • 派生PERIOD
    • ARRAY/VARRAY
    • 地理空間
    • BLOB列、CLOB列、またはXML列が含まれているDISTINCT型またはSTRUCTURED型のUDT

      他のすべてのTeradata SQLデータ型は有効です。

  • 現在または結果のいずれかのプライマリ インデックス列のセットに、FOREIGN KEY参照またはFOREIGN KEY制約がある場合、インデックスの名前だけを変更できます。そうしないと、リクエストがアボートされ、Teradata Databaseによってリクエスト側にエラーが返されます。
  • 値が入ったテーブルまたは結合インデックスのプライマリ インデックスまたは基本AMPインデックスの列セットを指定する場合、その列セットは、プライマリ インデックスまたは基本AMPインデックスの既存の列セットと同じでなければなりません。

    プライマリ インデックスまたは基本AMPインデックスの現在の列セットと異なるプライマリ インデックスまたは基本AMPインデックスの列セットを指定する場合、テーブルは空である必要があります。

  • 現時点でNUPIがあるプライマリ インデックス付きのテーブルにすでにデータが入っている場合に、そのテーブルを変更して、同じ列セットに基づくUPIを付けることができるのは、その列セットでUSIが定義されている場合に限られます。
  • 値が入ったテーブルまたは結合インデックスのプライマリ インデックスの列セットとして、PRIMARY KEYまたはUNIQUE制約で暗黙的に定義されている現在のプライマリ インデックスとは異なる列セットを指定する場合、システムはPRIMARY KEYまたはUNIQUE制約を削除します。
  • テーブルまたは結合インデックスの現在のプライマリ インデックスが、PRIMARY KEYまたはUNIQUE制約で暗黙的に定義され、ALTER TABLEを使用してPARTITION BY句を指定すると、システムはPRIMARY KEYまたはUNIQUE制約を削除します。
  • キュー テーブルのプライマリ インデックスを変更してパーティション化することはできません。

    キュー テーブルは、パーティション プライマリ インデックスまたは基本AMPインデックスを持つことはできません。

プライマリ インデックスまたは基本AMPインデックスの名前の変更

プライマリ インデックスまたは基本AMPインデックスの名前の変更には、以下のルールが適用されます。
  • index_nameを、テーブルまたは結合インデックスに定義されている、セカンダリ インデックスまたは制約の名前と同じにすることはできません。
  • index_nameを指定する場合、それがインデックスの名前になります。
  • NOT NAMEDを指定する場合、インデックスの名前はありません。
  • index_nameもNOT NAMED句も指定しない場合、現在の名前が変更されません。