この文は、テーブル定義を修正するとき、従属ビューを無効にするとき、またはテーブルの Replication Server レプリケーションを有効にするときに使用します。
ALTER TABLE [owner.]table-name { alter-clause, ... }
alter-clause : ADD create-clause | ALTER column-name column-alteration | ALTER [ CONSTRAINT constraint-name ] CHECK ( condition ) | DROP drop-object | RENAME rename-object | table-alteration
create-clause : column-name [ AS ] column-data-type [ new-column-attribute ... ] | table-constraint | PCTFREE integer
column-alteration : { column-data-type | alterable-column-attribute } [ alterable-column-attribute ... ] | SET COMPUTE ( compute-expression ) | ADD [ constraint-name ] CHECK ( condition ) | DROP { DEFAULT | COMPUTE | CHECK | CONSTRAINT constraint-name }
drop-object : column-name | CHECK | CONSTRAINT constraint-name | UNIQUE [ CLUSTERED ] ( index-columns-list ) | FOREIGN KEY fkey-name | PRIMARY KEY
rename-object : new-table-name | column-name TO new-column-name | CONSTRAINT constraint-name TO new-constraint-name
table-alteration : PCTFREE DEFAULT | REPLICATE { ON | OFF } | [ NOT ] ENCRYPTED
new-column-attribute : NULL | DEFAULT default-value | COMPRESSED | INLINE { inline-length | USE DEFAULT } | PREFIX { prefix-length | USE DEFAULT } | [ NO ] INDEX | IDENTITY | COMPUTE ( expression ) | column-constraint
table-constraint : [ CONSTRAINT constraint-name ] { CHECK ( condition ) | UNIQUE [ CLUSTERED | NONCLUSTERED ] ( column-name [ ASC | DESC ], ... ) | PRIMARY KEY [ CLUSTERED | NONCLUSTERED ] ( column-name [ ASC | DESC ], ... ) | foreign-key }
column-constraint : [ CONSTRAINT constraint-name ] { CHECK ( condition ) | UNIQUE [ CLUSTERED | NONCLUSTERED ] [ ASC | DESC ] | PRIMARY KEY [ CLUSTERED | NONCLUSTERED ] [ ASC | DESC ] | REFERENCES table-name [ ( column-name ) ] [ MATCH [ UNIQUE] { SIMPLE | FULL } ] [ actions ][ CLUSTERED | NONCLUSTERED ] | NOT NULL }
alterable-column-attribute : [ NOT ] NULL | DEFAULT default-value | [ CONSTRAINT constraint-name ] CHECK { NULL | ( condition ) } | [ NOT ] COMPRESSED | INLINE { inline-length | USE DEFAULT } | PREFIX { prefix-length | USE DEFAULT } | [ NO ] INDEX
default-value : special-value | string | global variable | [ - ] number | ( constant-expression ) | built-in-function ( constant-expression ) | AUTOINCREMENT | GLOBAL AUTOINCREMENT [ ( partition-size ) ] | NULL | TIMESTAMP | UTC TIMESTAMP | LAST USER | USER
special-value : CURRENT { DATABASE | DATE | REMOTE USER | TIME | TIMESTAMP | UTC TIMESTAMP | USER | PUBLISHER }
foreign-key : [ NOT NULL ] FOREIGN KEY [ role-name ] [ ( column-name [ ASC | DESC ], ... ) REFERENCES table-name [ ( pkey-column-list ) ] [ MATCH [ UNIQUE] { SIMPLE | FULL } ] [ actions ] [ CHECK ON COMMIT ] [ CLUSTERED ] [ FOR OLAP WORKLOAD ]
actions : [ ON UPDATE action ] [ ON DELETE action ]
action : CASCADE | SET NULL | SET DEFAULT | RESTRICT
ALTER TABLE [owner.]table-name { DISABLE VIEW DEPENDENCIES }
追加の句 次の項では、カラムまたはテーブルの定義を追加するときに使用する句について説明します。
ADD column-name [ AS ] column-data-type [ new-column-attribute ... ] 句 この構文は、テーブルに新しいカラムを追加し、カラムのデータ型と属性を指定するときに使用します。指定するデータ型の詳細については、SQL データ型を参照してください。
NULL 句と NOT NULL 句 この句は、カラムに NULL を許容するかどうかを指定するときに使用します。Bit 型のカラムでは、新規のカラムに NULL 値を使用できます。Bit 型のカラムの作成時には、NOT NULL の制約が自動的に設定されます。
DEFAULT 句 カラムのデフォルト値を設定します。カラムのすべてのローはこの値で作成されます。使用できるデフォルト値については、CREATE TABLE 文を参照してください。
column-constraint 句 この句はカラムに制約を追加するときに使用します。検査制約の例外を指定して新規の制約を追加すると、データベース・サーバは既存の値を検証して、制約を満たすことを確認します。テーブルの変更が完了した後に発生する操作の場合にのみ、検査制約が実行されます。使用できるカラムの制約を次に示します。
UNIQUE 句 この句は、カラムの値をユニークにする必要があることを指定するとき、クラスタード・インデックスと非クラスタード・インデックスのどちらを作成するかを指定するときに使用します。
PRIMARY KEY 句 この句は、カラムをプライマリ・キーにするとき、クラスタード・インデックスを使用するかどうかを指定するときに使用します。クラスタード・インデックスの詳細については、クラスタード・インデックスの使用を参照してください。
REFERENCES 句 この句は、別のテーブルへの参照を追加または変更するとき、一致を処理する方法を指定するとき、クラスタード・インデックスを使用するかどうかを指定するときに使用します。クラスタード・インデックスの詳細については、クラスタード・インデックスの使用を参照してください。
NULL 句と NOT NULL 句 この句は、カラムに NULL 値を許容するかどうかを指定するときに使用します。デフォルトでは、NULL を使用できます。
INLINE 句と PREFIX 句 BLOB を格納しているとき (文字データ型とバイナリ・データ型のみ)、INLINE 句と PREFIX 句を使用して、ロー内に保存する BLOB のサイズ (バイト単位) を指定します。詳細については、CREATE TABLE 文の INLINE 句と PREFIX 句の説明を参照してください。
INDEX 句と NO INDEX 句 この句は、サイズが大きな BLOB のインデックスをこのカラムに構築するかどうかを指定するときに使用します。この句の使用方法については、CREATE TABLE 文の [NO] INDEX 句に関する項を参照してください。
IDENTITY 句 この句は AUTOINCREMENT と同等です。T-SQL との互換性のために用意されている句です。CREATE TABLE 文の AUTOINCREMENT の説明を参照してください。
COMPUTE 句 この句は、カラムの値に expression の値を反映させるときに使用します。COMPUTE 句の使用の制限については、CREATE TABLE 文を参照してください。
ADD table-constraint 句 この句はテーブルの制約を追加するときに使用します。テーブルの制約によって、テーブルのカラムが保持できる内容が制限されます。テーブルの制約を追加または変更するときに、オプションの制約名を使用して各制約を修正または削除することができます。追加できるテーブルの制約一覧を以下に示します。
UNIQUE この句は、column-list に指定するカラム値をユニークにすることを指定するとき、オプションでクラスタード・インデックスを使用するかどうかを指定するときに使用します。この制約の詳細については、CREATE TABLE 文を参照してください。
PRIMARY KEY この句は、テーブルのプライマリ・キーを追加または変更するとき、クラスタード・インデックスを使用するかどうかを指定するときに使用します。テーブルは CREATE TABLE 文または別の ALTER TABLE 文が作成したプライマリ・キーを持っていてはいけません。この制約の詳細については、CREATE TABLE 文を参照してください。
クラスタード・インデックスの詳細については、クラスタード・インデックスの使用を参照してください。
foreign-key この句は外部キーを制約として追加するときに使用します。従属マテリアライズド・ビューを持つテーブルに対して、ADD FOREIGN KEY 以外のサブ句を ALTER TABLE 文で使用すると、ALTER TABLE 文は失敗します。その他すべての句の場合は、従属マテリアライズド・ビューを無効にし、変更が完了してから、再度有効にする必要があります。
この制約の詳細については、CREATE TABLE 文を参照してください。
ADD PCTFREE 句 各テーブル・ページに確保する空き領域の割合を指定します。空き領域は、データが更新されたときにローのサイズが増えた場合に使用されます。テーブル・ページに空き領域がない場合は、ページのローのサイズが増えるたびに、ローを複数のテーブル・ページに分割することが必要になり、ローの断片化が発生します。また、パフォーマンス低下の可能性があります。空き領域のパーセンテージを 0 に指定すると、各ページに空き領域を残さず、完全にパックします。空き領域のパーセントを高い値に設定すると、各ローは単独でページに挿入されます。PCTFREE が設定されない場合、または削除された場合、データベースのページ・サイズに応じたデフォルトの PCTFREE 値が適用されます (ページ・サイズが 4 KB 以上の場合は 200 バイト)。PCTFREE の値は、ISYSTAB システム・テーブルに格納されます。PCTFREE を設定すると、テーブル・ページに対するそれ以降のすべての挿入操作で、新しい値が使用されます。しかし、すでに挿入済みであったローは影響を受けません。値を変更しなければ、そのままの値が維持されます。PCTFREE は、ベース・テーブル、グローバル・テンポラリ・テーブル、またはローカル・テンポラリ・テーブルに対して指定できます。
変更の句 次の項では、カラムまたはテーブルの定義を変更するときに使用する句について説明します。
ALTER column-name column-alteration 句 この句は、指定したカラムの属性を変更するときに使用します。カラムに一意性制約、外部キー、またはプライマリ・キーが設定されている場合は、カラムのデフォルトのみを変更できます。ただし、その他を変更する場合は、キーまたは制約を削除してからカラムを修正してください。変更できる内容を次に示します。属性の詳細については、CREATE TABLE 文を参照してください。
column-data-type 句 この句は、カラムの長さまたはデータ型を変更するときに使用します。必要に応じて、変更されるカラムのデータを新しいデータ型に変換します。変換エラーが発生すると、操作は失敗となり、テーブルは変更されません。カラムのサイズを減らすことはできません。たとえば、VARCHAR(100) を VARCHAR(50) に変更することはできません。
[ NOT ] NULL 句 この句は、カラムに NULL を許容するかどうかの指定を変更するときに使用します。NOT NULL を指定し、既存ローのカラム値が NULL の場合、操作は失敗し、テーブルは変更されません。
CHECK NULL この句は、カラムの検査制約をすべて削除するときに使用します。
DEFAULT 句 この句は、カラムのデフォルト値を変更するときに使用します。
DEFAULT NULL 句 この句は、カラムのデフォルト値を削除するときに使用します。
[ CONSTRAINT constraint-name ] CHECK { NULL | ( condition ) } 句 この句はカラムに検査制約を追加するときに使用します。
[ NOT ] COMPRESSED 句 この句は、カラムを圧縮するかどうかの設定を変更するときに使用します。
INLINE 句と PREFIX 句 BLOB を含むカラムで INLINE 句と PREFIX 句を使用すると、ロー内に保持する BLOB のサイズ (バイト単位) を指定できます。INLINE 句と PREFIX 句を設定する方法の詳細については、CREATE TABLE 文の INLINE 句と PREFIX 句の説明を参照してください。
INDEX 句と NO INDEX 句 この句は、そのカラムのサイズが大きな BLOB にインデックスを構築するかどうかを指定するときに使用します。この句の使用方法については、CREATE TABLE 文の [NO] INDEX 句に関する項を参照してください。
SET COMPUTE 句 この句は、計算済みカラムと関連付けられた式を変更するときに使用します。この文を実行すると、カラムの値が再計算されます。新しい式が無効な場合、この文は失敗します。COMPUTE 式の使用の制限については、CREATE TABLE 文を参照してください。
ALTER CONSTRAINT constraint-name CHECK 句 この句は、指定したテーブルの検査制約を変更するときに使用します。
削除の句 次の項では、DROP の句について説明します。
DROP DEFAULT テーブルまたは指定したカラムに設定されたデフォルト値を削除します。既存の値は変更されません。
DROP COMPUTE 指定したカラムの COMPUTE 属性を削除します。この文はテーブル内の既存の値を変更しません。
DROP CHECK テーブルまたは指定したカラムのすべての検査制約を削除します。DELETE CHECK も使用できます。
DROP CONSTRAINT constraint-name テーブルまたは指定したカラムの指定した制約を削除します。DELETE CONSTRAINT も使用できます。
DROP column-name テーブルから指定したカラムを削除します。DELETE column-name も使用できます。カラムがインデックス、一意性制約、外部キー、またはプライマリ・キーに含まれている場合は、インデックス、制約またはキーを削除してからカラムを削除してください。このようにするとカラムを参照する検査制約は削除されません。
DROP UNIQUE ( column-name ... ) 指定したカラムの一意性制約を削除します。この一意性制約を参照する外部キーがあれば、それも削除されます。DELETE UNIQUE ( column-name ... ) も使用できます。
DROP FOREIGN KEY fkey-name 指定した外部キーを削除します。DELETE FOREIGN KEY fkey-name も使用できます。
DROP PRIMARY KEY プライマリ・キーを削除します。このテーブルのプライマリ・キーを参照するすべての外部キーも削除します。DELETE PRIMARY KEY も使用できます。
名前変更の句 次の項では、カラムまたはテーブルの定義の一部の名前変更に使用する句について説明します。
RENAME new-table-name テーブルの名前を new-table-name に変更します。場合によっては、古いテーブル名を使用しているアプリケーションを修正する必要があることに注意してください。名前の変更操作が正常に実行された後は、ON UPDATE アクションまたは ON DELETE アクションが指定された外部キーを削除してから再作成する必要があります。これは、アクションの実装に使用された system-created トリガが古い名前を参照しないようにするためです。
RENAME column-name TO new-column-name カラムの名前を new-column-name に変更します。場合によっては、古いカラム名を使用しているアプリケーションを修正する必要があることに注意してください。名前の変更操作が正常に実行された後は、ON UPDATE アクションまたは ON DELETE アクションが指定された外部キーを削除してから再作成する必要があります。これは、アクションの実装に使用された system-created トリガが古い名前を参照しないようにするためです。
RENAME CONSTRAINT constraint-name TO new-constraint-name 制約の名前を new-constraint-name に変更します。
table-alteration 句 この句は、次のテーブルの属性を変更するときに使用します。
PCTFREE DEFAULT この句は、テーブルの空き割合設定をデフォルト値 (ページ・サイズが 4 KB 以上の場合は 200 バイト) に変更するときに使用します。
REPLICATE { ON | OFF } この句は、レプリケーション時にテーブルを含めるかどうかの設定を変更するときに使用します。テーブルに REPLICATE ON があるとき、テーブルに対するすべての変更はレプリケーションのために Replication Server に送信されます。Replication Server のレプリケーション定義は、どのテーブルの変更が他のサイトに送信されたかを決定するために使用されます。
[ NOT ] ENCRYPTED この句は、テーブルを暗号化するかどうかの設定を変更するときに使用します。テーブルを暗号化するには、データベースでテーブルの暗号化があらかじめ有効になっている必要があります。その後、データベースの作成時に指定された暗号化キーとアルゴリズムを使用してテーブルが暗号化されます。データベース内のテーブル暗号化の有効化を参照してください。テーブルを暗号化した後でも、暗号化前にテンポラリ・ファイルまたはトランザクション・ログに含まれていたテーブルのデータはすべて暗号化されない形式で保存されます。これを解決するには、データベースを再起動してテンポラリ・ファイルを削除します。-o オプションでバックアップ・ユーティリティ (dbbackup) を実行するか、BACKUP 文を使用して、トランザクション・ログをバックアップして新規のログを開始します。バックアップ・ユーティリティ (dbbackup)またはBACKUP 文を参照してください。
テーブルの暗号化が有効の場合、暗号化されるテーブルのテーブル・ページ、関連するインデックス・ページ、テンポラリ・ファイルのページ、および暗号化されるテーブルのトランザクションを含むトランザクション・ログ・ページが暗号化されます。
DISABLE VIEW DEPENDENCIES 句 この句は、通常の従属ビューを無効にするときにしようします。従属マテリアライズド・ビューは無効になりません。従属マテリアライズド・ビューを無効にするには、それぞれに対して ALTER MATERIALIZED VIEW ... DISABLE 文を実行する必要があります。ALTER MATERIALIZED VIEW 文を参照してください。
ALTER TABLE 文は、既存テーブルのテーブル属性 (カラム定義、制約など) を変更します。
データベース・サーバは、データベース内のオブジェクトの依存関係を追跡します。テーブルのスキームを変更すると、従属ビューに影響が及ぶ場合があります。また、変更するテーブルに従属マテリアライズド・ビューがある場合は、あらかじめ ALTER MATERIALIZED VIEW ... DISABLE 文を使用して無効にしておく必要があります。ビューの依存性については、ビューの依存性を参照してください。
ローカル・テンポラリ・テーブル上では ALTER TABLE を使用できません。
ALTER TABLE 文は、他の接続で現在使用中のテーブルに影響を及ぼす場合は実行できません。ALTER TABLE には時間がかかり、データベース・サーバは、文の処理中にそのテーブルを参照する処理ができません。
CLUSTERED オプションの使用の詳細については、クラスタード・インデックスの使用を参照してください。
IMMEDIATE REFRESH として定義されたテキスト・インデックスが構築されたカラムを変更すると、テキスト・インデックスがすぐに再構築されます。テキスト・インデックスが AUTO REFRESH または MANUAL REFRESH として定義されている場合は、テキスト・インデックスが次回の再表示時に再構築されます。
ALTER TABLE 文を実行すると、データベース・サーバは、自動的に再コンパイルされる従属ビューに対するカラム・パーミッションをリストアしようとします。再コンパイルされたビューに存在しないカラムに対するパーミッションは、失われます。
次のいずれかであることが必要です。
テーブルの所有者
DBA 権限を持つユーザ
テーブルに対する ALTER パーミッションを付与されたユーザ
ALTER TABLE には、テーブルへの排他的アクセスが必要です。
グローバル・テンポラリ・テーブルは、このテンポラリ・テーブルを参照したすべてのユーザが切断されるまで変更できません。
スナップショット・トランザクション内では使用できません。スナップショット・アイソレーションを参照してください。
オートコミット。
チェックポイントは ALTER TABLE 操作の開始時に実行されます。また、ALTER 操作が完了するまでチェックポイントは中断されます。
カラムまたはテーブルを変更すると、変更を加えたカラムを参照するストアド・プロシージャ、ビュー、その他のアイテムは動作しなくなる場合があります。
宣言されたカラムの長さまたは型を変更した場合、またはカラムを削除した場合、そのカラムの統計情報は削除されます。新しい統計情報を生成する方法については、カラム統計の更新によるオプティマイザのパフォーマンス向上を参照してください。
SQL/2003 ADD COLUMN はコア機能です。他の句は、ベンダ拡張または SQL/2003 への特定の名前付き拡張の実装です。
次の例は、新しいタイムスタンプ・カラム TimeStamp を Customers テーブルに追加します。
ALTER TABLE Customers ADD TimeStamp AS TIMESTAMP DEFAULT TIMESTAMP; |
次の例は、前の例で追加した新しいタイムスタンプ・カラム TimeStamp を削除します。
ALTER TABLE Customers DROP TimeStamp; |
Customers テーブルの Street カラムは、現在 35 文字まで保持できます。最大 50 文字まで保持できるようにするには、次を実行します。
ALTER TABLE Customers ALTER Street CHAR(50); |
次の例は、Customers テーブルにカラムを追加して、各顧客に販売担当を割り当てます。
ALTER TABLE Customers ADD SalesContact INTEGER REFERENCES Employees ( EmployeeID ) ON UPDATE CASCADE ON DELETE SET NULL; |
この外部キーは、カスケード更新で構成され、削除される時に NULL が設定されます。従業員がその従業員 ID を変更すると、カラムが更新してこの変更を反映します。従業員が会社を辞めて、従業員 ID が削除されると、カラムは NULL に設定されます。
次の例は、SalesOrders.SalesRepresentative カラムに外部キー FK_SalesRepresentative_EmployeeID2 を作成し、Employees.EmployeeID にリンクします。
ALTER TABLE GROUPO.SalesOrders ADD CONSTRAINT FK_SalesRepresentative_EmployeeID2 FOREIGN KEY ( SalesRepresentative ) REFERENCES GROUPO.Employees (EmployeeID); |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |