ALTER TABLEは、既存の表を変更するSQL文である。

表に列を追加する

ALTER TABLE [schema.]table ADD (column data_type [DEFAULT default_value] [,column data_type [DEFAULT default_value]...)
schema

列を追加する表のスキーマを指定する。スキーマの指定を省略した場合は、自分のスキーマ内の表が対象となる。

table

列を追加する表を指定する。

column

追加する列の名前を指定する。

data_type

追加する列のデータ型を指定する。

default_value

追加する列のデフォルト値を指定する。

表の列を変更する

ALTER TABLE [ schema .] table MODIFY ( column [ data_type ] [DEFAULT default_value ] [, column [ data_type ] [DEFAULT default_value ]...)

NOT NULL制約を追加する例

ALTER TABLE employee MODIFY (empno NOT NULL, ename NOT NULL);

制約を追加する列がひとつの場合、列名のリストを囲む括弧を省略することができる。

ALTER TABLE employee MODIFY empno NOT NULL;

NOT NULL制約を削除する例

ALTER TABLE employee MODIFY (empno NULL, ename NULL);

制約を削除する列がひとつの場合、列名のリストを囲む括弧を省略することができる。

ALTER TABLE employee MODIFY empno NULL;

表から列を削除する

ALTER TABLE [ schema .] table DROP ( column [, column ...]) [CASCADE CONSTRAINTS]

他の表から外部キー制約で参照されている列の場合はエラーとなり、削除できません。これは、参照先の列が削除されてしまうと、参照元の外部キー制約がすべて制約違反になってしまい、データの整合性が無くなってしまうからです。

外部キー制約で参照されている列

この場合、CASCADE CONSTRAINTS を指定すると、外部キー制約ごと列を削除することができます。

外部キー制約ごと列を削除

表に制約を追加する

表に主キーを追加する

ALTER TABLE [ schema .] table ADD [COSTRAINT constraint_name ] PRIMARY KEY ( column_name [, column_name ...]) [USING INDEX [TABLESPACE { tablespace_name |DEFAULT}] [PCTFREE size ] [PCTUSED size ] [INITRANS integer ]]

schema
変更する表が存在するスキーマの名前を指定する。自分のスキーマ以外の表を変更するには、ALTER ANY TABLEシステム権限が必要である。スキーマ名の指定を省略した場合は、自分のスキーマ内にある表を変更する。
table
主キーを追加する表の名前を指定する。
constraint_name
追加する制約の名前を指定する。制約名の指定を省略した場合は、自動的に生成された制約名が暗黙のうちに付けられる。
column_name
主キーに設定する列の名前を指定する。カンマで区切って複数の列を指定することもできる。
USING INDEX
主キーに索引を使用する。
TABLESPACE tablespace_name
索引が使用する表領域の名前を指定する。
TABLESPACE DEFAULT
索引はデフォルトの表領域を使用する。
PCTFREE
データベースオブジェクトの各データブロック内で、オブジェクトの行を将来更新するために確保しておく領域の割合をパーセント単位で指定する。
PCTUSED
使用済み領域のうち、データベースオブジェクトのデータブロックごとに確保される最小限の割合をパーセント単位で指定する。
INITRANS
データベースオブジェクトに割り当てられた各データブロックに割り当てられる、同時実行トランザクションエントリの初期値を指定する。

表に一意キーを追加する

ALTER TABLE [ schema .] table ADD [COSTRAINT constraint_name ] UNIQUE ( column_name [, column_name ...]) [USING INDEX [TABLESPACE { tablespace_name |DEFAULT}] [PCTFREE size ] [PCTUSED size ] [INITRANS integer ]]

schema
変更する表が存在するスキーマの名前を指定する。自分のスキーマ以外の表を変更するには、ALTER ANY TABLEシステム権限が必要である。スキーマ名の指定を省略した場合は、自分のスキーマ内にある表を変更する。
table
一意キーを追加する表の名前を指定する。
constraint_name
追加する制約の名前を指定する。制約名の指定を省略した場合は、自動的に生成された制約名が暗黙のうちに付けられる。
column_name
一意キーに設定する列の名前を指定する。カンマで区切って複数の列を指定することもできる。
USING INDEX
一意キーに索引を使用する。
TABLESPACE tablespace_name
索引が使用する表領域の名前を指定する。
TABLESPACE DEFAULT
索引はデフォルトの表領域を使用する。
PCTFREE
データベースオブジェクトの各データブロック内で、オブジェクトの行を将来更新するために確保しておく領域の割合をパーセント単位で指定する。読み取り専用の表であれば0でも構わない。
PCTUSED
使用済み領域のうち、データベースオブジェクトのデータブロックごとに確保される最小限の割合をパーセント単位で指定する。
INITRANS

表に外部キーを追加する

ALTER TABLE [ schema .] table ADD [COSTRAINT constraint_name ] FOREIGN KEY ( column_name [, column_name ...]) REFERENCES [ schema .] object [( column_name [, column_name ...])]

schema
変更する表が存在するスキーマの名前を指定する。自分のスキーマ以外の表を変更するには、ALTER ANY TABLEシステム権限が必要である。スキーマ名の指定を省略した場合は、自分のスキーマ内にある表を変更する。
table
外部キーを追加する表の名前を指定する。
constraint_name
追加する制約の名前を指定する。制約名の指定を省略した場合は、自動的に生成された制約名が暗黙のうちに付けられる。
column_name
外部キーに設定する列の名前を指定する。カンマで区切って複数の列を指定することもできる。

表にチェック制約を追加する

ALTER TABLE [ schema .] table ADD [COSTRAINT constraint_name ] CHECK ( condition )

schema
変更する表が存在するスキーマの名前を指定する。自分のスキーマ以外の表を変更するには、ALTER ANY TABLEシステム権限が必要である。スキーマ名の指定を省略した場合は、自分のスキーマ内にある表を変更する。
table
チェック制約を追加する表の名前を指定する。
constraint_name
追加する制約の名前を指定する。制約名の指定を省略した場合は、自動的に生成された制約名が暗黙のうちに付けられる。
check
チェックする条件を指定する。

表にチェック制約を追加する例

ALTER TABLE employee ADD CONSTRAINT check_salary CHECK (salary > 0);

表から制約を削除する

ALTER TABLE [ schema .] table DROP COSTRAINT constraint_name

table
制約を削除する表の名前を指定する。
constraint_name
削除する制約の名前を指定する。

チェック制約を削除する例

ALTER TABLE employee DROP CONSTRAINT check_salary;

表の名前を変更する

ALTER TABLE [ schema .] table RENAME new_table

table
変更前の表の名前を指定する。
new_table
変更後の表の名前を指定する。
スポンサーリンク