[OracleDB] テーブル定義変更のSQL「alter table」文とポイントを紹介

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 <外部参照テーブル>(<カラム名>,<カラム名>...);

元のテーブル作成は↓の記事を参考にしてください。

あわせて読みたい
[OracleDB] 表領域作成SQL「create tablespace」文とポイントを紹介 Oracle Databaseの表領域の作成**SQL**と作成時のポイントを紹介します。 単純な作成SQLは各種メディアやブログで紹介されていますが、 この記事では表領域を操作する時...

外部キー(参照整合性)の削除: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回 表と表領域の関係

よかったらシェアしてね!
  • URLをコピーしました!
目次