ALTER TABLE
ALTER TABLE コマンドは、既存表の構造の変更に使用します。 アクティブな照会により表が使用されている場合は、その照会の終了を待って ALTER コマンドが実行されます。
- 列デフォルトを変更または除去する。 設定したデフォルトは、以降の INSERT コマンドのみに適用され、表の既存の行には適用されません。
- 列または表内のデータ・タイプやサイズは変更せず列または表の名前を変更する。 キーワード列は省略できます。
- 表制約または列制約を追加または除去する。 制約を変更することはできません。 変更したい場合には、制約を除去して新規作成する必要があります。
- varchar 列の長さを変更する。
表がストアード・プロシージャーから参照されている場合は、列を追加したり除去したりすることができません。 ALTER TABLE コマンドを実行する前に、まずストアード・プロシージャーを除去し、表が変更された後で、ストアード・プロシージャーを再作成する必要があります。
構文
ALTER TABLE <table> <action> [ORGANIZE ON {(<columns>) | NONE}]<action> は以下のいずれかになります。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>
<col_constraint> は、以下を表します。[ CONSTRAINT <constraint_name> ]
{NOT NULL | NULL | UNIQUE | PRIMARY KEY | DEFAULT <value> | <ref>}
[ [ [ NOT ] DEFERRABLE ] { INITIALLY DEFERRED | INITIALLY IMMEDIATE } |
[ INITIALLY DEFERRED | INITIALLY IMMEDIATE ] [ NOT ] DEFERRABLE ]<table_constraint> は、以下を表します。[ 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 ]<ref> は、以下を表します。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> | 変更する表の名前。 |
| &amp; lt; /アクション> | 指定された表に対して実行するアクション。
|
| <col> | 列の名前。 |
| <user_name> | ユーザーの名前。 |
| <new_col_name> | 列に付けられる新しい名前。 |
| <new_table> | 表の新しい名前 |
| ORGANIZE ON | 表の編成の対象となる列 (1 から 4 列)。 これは外部表には指定できません。 列が指定されている場合、表にマテリアライズ・ビューを含めることができません。さらに、指定されたすべての列データ型はゾーン・マップ可能でなければなりません。 表データの再編成は、GROOM TABLE が実行されるときに有効になります。 詳細については、『IBM® Netezza®システム管理者ガイド』の「クラスタ化ベース・テーブルの使用」を参照してください。 |
| <constraint_name> | 列制約または表制約に付けられる名前。 名前を指定しない場合、システムが名前を生成します。 |
| NOT DEFERRABLE | DEFERRABLE | 制約をトランザクションの終了まで延期できるかどうかを制御します。 デフォルトは、NOT DEFERRABLE です。 Netezza Performance Serverは制約チェックと参照整合性をサポートしていません) |
| 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; - 列の varchar の長さを変更します。
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;