ALTER TABLE コマンドは、既存表の構造の変更に使用します。アクティブな照会により表が使用されている場合は、その照会の終了を待って ALTER コマンドが実行されます。
表がストアード・プロシージャーから参照されている場合は、列を追加したり除去したりすることができません。 ALTER TABLE コマンドを実行する前に、まずストアード・プロシージャーを除去し、表が変更された後で、ストアード・プロシージャーを再作成する必要があります。
ALTER TABLE <table> <action> [ORGANIZE ON {(<columns>) | NONE}]
ADD COLUMN <col> <type> [<col_constraint>][,…] |
ADD <table_constraint> |
ALTER [COLUMN] <col> { SET DEFAULT <value> | DROP DEFAULT } |
DROP [COLUMN] column_name[,column_name…] {CASCADE | RESTRICT } |
DROP CONSTRAINT <constraint_name> {CASCADE | RESTRICT} |
MODIFY COLUMN (<col> VARCHAR(<maxsize>)) |
OWNER TO <user_name> |
RENAME [COLUMN] <col> TO <new_col_name> |
RENAME TO <new_table> |
SET PRIVILEGES TO <table>
[ CONSTRAINT <constraint_name> ]
{NOT NULL | NULL | UNIQUE | PRIMARY KEY | DEFAULT <value> | <ref>}
[ [ [ NOT ] DEFERRABLE ] { INITIALLY DEFERRED | INITIALLY IMMEDIATE } |
[ INITIALLY DEFERRED | INITIALLY IMMEDIATE ] [ NOT ] DEFERRABLE ]
[ CONSTRAINT <constraint_name> ]
{UNIQUE (<col>[,<col>…] ) |
PRIMARY KEY (<pkcol_name>[,<pkcol_name>…] ) |
FOREIGN KEY (<fkcol_name>[,<fkcol_name>…] ) <ref>}
[ [ [ NOT ] DEFERRABLE ] { INITIALLY DEFERRED | INITIALLY IMMEDIATE } |
[ INITIALLY DEFERRED | INITIALLY IMMEDIATE ] [ NOT ] DEFERRABLE ]
REFERENCES <reftable> [ (<refcol_name>[,<refcol_name>…] ) ]
[ MATCH FULL ]
[ ON UPDATE {CASCADE | RESTRICT | SET NULL | SET DEFAULT | NO ACTION} ]
[ ON DELETE {CASCADE | RESTRICT | SET NULL | SET DEFAULT | NO ACTION} ]
ALTER TABLE コマンドの入力は以下のとおりです。
| 入力 | 説明 |
|---|---|
| <table> | 変更する表の名前。 |
| <action> | 指定された表に対して実行するアクション。
|
| <col> | 列の名前。 |
| <user_name> | ユーザーの名前。 |
| <new_col_name> | 列に付けられる新しい名前。 |
| <new_table> | 表の新しい名前 |
| ORGANIZE ON | 表の編成の対象となる列 (1 から 4 列)。 これは外部表には指定できません。 列が指定されている場合、表にマテリアライズ・ビューを含めることができません。さらに、指定されたすべての列データ型はゾーン・マップ可能でなければなりません。 表データの再編成は、GROOM TABLE が実行されるときに有効になります。 詳しくは、「IBM Netezza システム管理者ガイド」の『クラスター基本表の使用』を参照してください。 |
| <constraint_name> | 列制約または表制約に付けられる名前。名前を指定しない場合、システムが名前を生成します。 |
| NOT DEFERRABLE | DEFERRABLE | 制約をトランザクションの終了まで延期できるかどうかを制御します。デフォルトは、NOT DEFERRABLE です。(Netezza® では、制約チェックおよび参照整合性をサポートしません。) |
| INITIALLY | DEFERRED (トランザクションの終了時点) または IMMEDIATE (それぞれの文の終了時点) のいずれかを指定します。 |
| NOT NULL | NULL | 列に NULL 値を含めることができるかどうか。NULL がデフォルトです。 |
| UNIQUE (列および表制約) | 列の各値が固有である必要があるかどうか。 |
| PRIMARY KEY (列および表制約) | 指定した列が表の主キーを形成するかどうか。 この制約は、本質的に UNIQUE 制約と NOT NULL 制約を組み合わせたものですが、列セットを主キーとして識別することにより、スキーマの設計に関する メタデータの提供も行います。主キーは、他の表から、この列セットを行の固有 ID として信頼できることを意味します。 列制約として、または表制約として、1 つの表に対して 1 つの PRIMARY KEY 制約のみを指定できます。 主キーを構成する列セットは、その表に対して定義された UNIQUE 制約で指定された列の他のセットとは異っている必要があります。 |
| DEFAULT (列制約) | この列の各行に配置されるデフォルト値。 |
| REFERENCES (列制約) | 新規表の指定された列には、指定された表の指定された列内の値と一致する値のみが含まれている必要があります。 |
| FOREIGN KEY および REFERENCES 表 (表制約) | 新規表の指定された列には、指定された表の指定された列内の値と一致する値のみが含まれている必要があります。列を指定しない場合、値は表の主キーと一致している必要があります。参照表の指定された列には、その表の UNIQUE 制約または PRIMARY KEY 制約が必要です。 |
| MATCH FULL | MATCH FULL を指定すると、複数列からなる外部キーの 1 つの列は、外部キーの他の部分が NULL ではない場合に、NULL を持つことができません。これはデフォルトです。 MATCH PARTIAL はサポートされません。 |
| ON UPDATE | ON DELETE | 指定された表または列が更新または削除されたときに実行されるアクション。
|
ALTER TABLE コマンドは以下の出力を生成します。
| 出力 | 説明 |
|---|---|
| ALTER | コマンドは正常に実行されました。 |
| ERROR | 指定した表または列は使用できません。 |
admin ユーザー、表の所有者、または表が定義されたデータベースかスキーマの所有者であるか、あるいはアカウントがその表または Table オブジェクト・クラスに対する Alter 特権を持っている必要があります。表の所有者を変更する場合、そのユーザー・アカウントに対する List アクセス権限が必要です。
MYDB.SCH1(USER)=> ALTER TABLE distributors ALTER COLUMN address DROP
DEFAULT;
MYDB.SCH1(USER)=> ALTER TABLE t3 MODIFY COLUMN (col1 VARCHAR(6));
MYDB.SCH1(USER)=> ALTER TABLE distributors RENAME COLUMN address TO
city;
MYDB.SCH1(USER)=> ALTER TABLE distributors RENAME TO suppliers;
MYDB.SCH1(USER)=> ALTER TABLE distributors OWNER TO carmen;
MYDB.SCH1(USER)=> ALTER TABLE distributors SET PRIVILEGES TO suppliers;
MYDB.SCH1(USER)=> ALTER TABLE distributors ADD CONSTRAINT empkey
PRIMARY KEY(col1) INITIALLY IMMEDIATE;
MYDB.SCH1(USER)=> ALTER TABLE distributors DROP CONSTRAINT empkey
CASCADE;