OracleDB

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

こんにちは!土門大貴(daikidomon)です。

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 TEST001.TAB001
add constraint TAB001_FK foreign key (COL01)
references TEST001.TAB001PARENT(COL01);
元のテーブル作成は↓の記事を参考にしてください。

[OracleDB] 表領域作成SQL「create tablespace」文とポイントを紹介

こんにちは!土門大貴(daikidomon)です。 Oracle Databaseの表領域の作成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回 表と表領域の関係

関連記事

-OracleDB

Copyright© スタートアップIT企業社長のブログ , 2020 All Rights Reserved.