Oracle Databaseのテーブルの定義変更**SQL**のポイントを紹介します。
テーブル定義の変更作業は、カラム(列)の変更や制約の追加・削除がメインになります。
単純なテーブル変更SQLは各種メディアやブログで紹介されており、指定できるパラメータも多くあります。
この記事では初心者向けにテーブルの定義変更する時の重要なポイントも合わせて紹介します。
この記事の内容
- テーブルの定義変更SQLの基本構文を紹介
- カラム(列)の追加・定義変更・削除
- プライマリーキー、ユニークキー、外部キーの追加・変更・削除
- テーブル名・カラム名の変更
テーブルの定義変更SQL:alter table
まずはテーブル定義変更のSQL「alter table」を紹介したいと思います。
alter table文は、テーブル定義変更するコマンドになります。
テーブル後に変更ができないパラメータが多く存在するため作成SQLを間違えないようにしましょ
create table <スキーマ名>.<テーブル名> <定義変更>(
<カラム名> <データ型>,
<カラム名> <データ型>,
<カラム名> <データ型>
);
下がサンプルSQLになります。
テーブル名を指定指定する時は、「スキーマ名.テーブル名」の形で作成しましょう。
「定義変更」句内でテーブル定義変更を指定します。
列名の指定はカンマ区切りで行います。
カラムの追加:alter table ~ add
カラムの追加時には「add」句を使用します。
カラム追加時にNOT NULL制約やデフォルト値も指定することが可能です。
alter table <スキーマ名>.<テーブル名> add(
<カラム名> <データ型>
);
下がサンプルSQLになります。
alter table TEST001.TAB001 add(
COL99 varchar2(10) default 'AAAAA' not null
);
カラムの定義変更:alter table ~ modify
カラムの定義変更は「modify」句を利用します。
データ型・データサイズを変更
変更したいデータサイズとデータ型を作成済みのカラムに指定します。
alter table <スキーマ名>.<テーブル名> modify(
<カラム名> <変更したいデータ型とデータサイズ>
);
下がサンプルSQLになります。例では”COL01”をchar型でデータサイズ1000byteに変更します。
alter table TEST001.TAB001 modify(
COL01 char(100)
);
NOT NULL制約を付与:NOT NULL
NOT NULL制約を付与する場合には、対象列に「NOT NULL」句を付与します。
alter table <スキーマ名>.<テーブル名> modify(
<カラム名> not null
);
下がサンプルSQLになります。
alter table TEST001.TAB001 modify(
COL01 not null
);
デフォルト値を指定:DEFAULT
デフォルト値を指定する場合には、対象列に「DEFAULT」句+「デフォルト値」を付与します。
alter table <スキーマ名>.<テーブル名> modify(
<カラム名> default <デフォルト値>
);
下がサンプルSQLになります。
alter table TEST001.TAB001 modify(
COL01 default 'AAAAA'
);
カラムの削除:alter table ~ drop
カラムを削除する場合には「drop」句を使用します。
alter table <スキーマ名>.<テーブル名> drop(
<カラム名>
);
下がサンプルSQLになります。2つ目の例では参照制約も合わせて削除するサンプルです。
alter table TEST001.TAB001 drop(
COL01
);
alter table TEST001.TAB001 drop(
COL01
) cascade constraint;
キー制約の追加と削除
「プライマリーキー」や「ユニークキー」や「外部キー」も「alter table」文で行えます。
プライマリーキーの追加:add constraint ~ primary key
プライマリーキーを追加するには「add constraint ~ primary key」を指定します。
alter table <スキーマ名>.<テーブル名> add constraint <プライマリーキー名>
primary key (<カラム名>, <カラム名>);
下がサンプルSQLになります。
alter table TEST001.TAB001 add constraint TAB001_PK
primary key (COL01);
表領域は指定できないので作成後に「move」させる必要があります。
プライマリーキーの削除:add primary key
プライマリーキーを削除するには「add ~ primary key」を指定します。
alter table <スキーマ名>.<テーブル名> drop primary key;
下がサンプルSQLになります。
alter table TEST001.TAB001 drop primary key;
ユニークキー(一意制約)の追加:add constraint ~ unique
ユニークキーを追加するには「add constraint ~ unique」を指定します。
alter table <スキーマ名>.<テーブル名> add constraint <ユニークキー名>
unique (<カラム名>, <カラム名>);
下がサンプルSQLになります。
alter table TEST001.TAB001 add constraint TAB001_UK
unique (COL01);
表領域は指定できないので作成後に「move」させる必要があります。
ユニークキー(一意制約)を削除:drop constraint
ユニークキーを削除するには「drop constrant」を指定します。
alter table <スキーマ名>.<テーブル名> drop constraint <ユニークキー名>;
下がサンプルSQLになります。
alter table TEST001.TAB001 drop constraint TAB001_UK;
外部キー(参照整合性)の追加:add constraint ~ foreign key ~ references
外部キーを作成するには「add constraint ~ foreign key ~ references ~」を指定します。
alter table <スキーマ名>.<テーブル名>
add constraint <外部キー名> foreign key (<カラム名>,<カラム名>...)
references <外部参照テーブル>(<カラム名>,<カラム名>...);
下がサンプルSQLになります。
alter table <スキーマ名>.<テーブル名>
add constraint <外部キー名> foreign key (<カラム名>,<カラム名>...)
references <外部参照テーブル>(<カラム名>,<カラム名>...);
元のテーブル作成は↓の記事を参考にしてください。
外部キー(参照整合性)の削除:drop constraint
ユニークキーを削除するには「drop constraint」を指定します。
alter table <スキーマ名>.<テーブル名> drop constraint <外部キー名>;
下がサンプルSQLになります。
alter table TEST001.TAB001 drop constraint TAB001_FK;
テーブル名・カラム名の変更
テーブル名の変更:rename to
テーブル名の変更は「rename to」を指定します。
alter table <スキーマ名>.<テーブル名> rename to <変更後テーブル名>;
下がサンプルSQLになります。
alter table TEST001.TAB001 rename to TAB001_TMP;
カラム名の変更:rename column ~ to
カラム名の変更は「rename column ~ to」を指定します。
alter table <スキーマ名>.<テーブル名> rename column <カラム名> to <変更後のカラム名>;
下がサンプルSQLになります。
alter table TEST001.TAB001 rename column COL01 to COL99;
参考:しばちょう先生の試して納得!DBAへの道 第2回 表と表領域の関係