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