テーブル構造を変更する(ALTER TABLE文)

ALTER TABLE 文を使用すると作成済みのテーブル構造を変更することができます。カラムの追加と削除、制約の追加と削除などテーブルに対して色々な変更を加えることができます。ここでは MariaDB で ALTER TABLE 文を使ってテーブル構造を変更する方法について解説します。

(Last modified: )

テーブル名を変更する

作成済みのテーブル名の変更を行うには ALTER TABLE RENAME 文を使います。

ALTER [ONLINE] [IGNORE] TABLE [IF EXISTS] tbl_name
  RENAME [TO] new_tbl_name

tbl_name テーブルの名前を new_tbl_name に変更します。

では実際に試してみます。現在 mydb データベースには drink という名前のテーブルが作成されています。

show tables;

テーブル名を変更する(1)

新しいテーブルを作成しました。テーブルの中の id カラムには UNIQUE 制約が設定されています。

drink テーブルの名前を water という名前に変更します。次のように実行してください。

alter table drink rename to water;

テーブル名を変更する(2)

テーブル名の変更が完了しました。

それでは改めて作成済みのテーブルの一覧を取得してみます。

テーブル名を変更する(3)

mydb データベースに作成されていたテーブルは一つだけですので、テーブル名が変更されていることが確認できました。

RENAME TABLE文を使ったテーブルの変更

なおテーブル名を変更するには RENAME TABLE 文を使用することもできます。

RENAME TABLE[S] [IF EXISTS] tbl_name 
  [WAIT n | NOWAIT]
  TO new_tbl_name
    [, tbl_name2 TO new_tbl_name2] ...

tbl_name テーブルの名前を new_tbl_name に変更します。

カラム名を変更する

作成済みのテーブル名に含まれるカラムの名前を変更するには ALTER TABLE RENAME COLUMN 文を使います。

ALTER [ONLINE] [IGNORE] TABLE [IF EXISTS] tbl_name
  RENAME COLUMN old_col_name TO new_col_name

tbl_name テーブルに含まれる old_col_name カラムの名前を new_col_name に変更します。

それでは実際に試してみます。まず water テーブルに含まれるカラムの一覧を取得します。次のように実行してください。

show columns from water;

カラム名を変更する(1)

3 つのカラムが含まれていることが確認できました。この中の id カラムの名前を drinkid に変更します。次のように実行してください。

alter table water rename column id to drinkid;

カラム名を変更する(2)

カラムの名前が id から drinkid に変更されました。

それではあらためて water テーブルに含まれるカラムの一覧を取得してみます。

カラム名を変更する(3)

id カラムの名前が drinkid に変更されていることが確認できました。

カラムの定義を変更する

作成済みのテーブルに対してカラムの定義を変更するには ALTER TABLE CHANGE 文または ALTER TABLE MODIFY 文を使います。書式は次の通りです。

ALTER [ONLINE] [IGNORE] TABLE [IF EXISTS] tbl_name
  CHANGE [COLUMN] [IF EXISTS] old_col_name new_col_name column_definition
        [FIRST|AFTER col_name]
ALTER [ONLINE] [IGNORE] TABLE [IF EXISTS] tbl_name
  MODIFY [COLUMN] [IF EXISTS] col_name column_definition
        [FIRST | AFTER col_name]

ALTER TABLE CHANGE 文はカラム名と定義を同時に変更することができます。 ALTER TABLE MODIFY 文はカラム定義だけを変更します。今回は ALTER TABLE MODIFY 文の方を試してみます。

作成済みの water テーブルに含まれるカラムは次のように定義されています。

show create table water\g

カラムの定義を変更する(1)

それでは name カラムの定義を次のように変更してみます。

変更前: name varchar(10) DEFAULT NULL
変更後: name varchar(20) NOT NULL DEFAULT 'Unknown'

次のように実行してください。

alter table water modify name varchar(20) not null default 'Unknown';

カラムの定義を変更する(2)

name カラムの定義が変更されました。

それではあらためてテーブルに含まれるカラムの定義を確認してみます。

カラムの定義を変更する(3)

name カラムの定義が変更されていることが確認できました。

テーブルにカラムを追加する

作成済みのテーブルにカラムを追加するには ALTER TABLE ADD 文を使用します。

ALTER [ONLINE] [IGNORE] TABLE [IF EXISTS] tbl_name
  ADD [COLUMN] [IF NOT EXISTS] col_name column_definition
        [FIRST | AFTER col_name ]

対象のテーブルにカラムを追加します。カラムの名前は col_name 、データ型や制約は column_definition に指定してください。カラムを追加する時に位置を指定しなければテーブルの最後に追加されます。テーブルの先頭に追加する場合は FIRST を、指定のカラムの次に追加するには AFTER col_name を記述してください。

では実際に試してみます。次のようなテーブルを作成しデータを追加しました。

create table user (id int, name varchar(10));

insert into user values(1, 'Suzuki');
insert into user values(2, 'Honda');

テーブルにカラムを追加する(1)

現在のカラムの並びは次のようになっています。

show columns from user;

テーブルにカラムを追加する(2)

それではカラムを追加します。まずは追加する位置を指定せずにカラムを追加します。次のように実行してください。

alter table user add column address varchar(10);

テーブルにカラムを追加する(3)

user テーブルに address カラムが追加されました。位置を指定していないのでテーブルの最後に追加されています。

あらためてテーブルのカラムの並びを確認してみます。

テーブルにカラムを追加する(4)

テーブルの最後に address カラムが追加されていることが確認できました。

テーブルにデータが追加されている状態でテーブルにカラムを追加すると、既に追加されていたデータの追加したカラムにはデフォルトの値が格納されます。今回、新しく追加したカラムのデフォルトの値を指定していないので NULL が自動的に格納されます。実際にテーブルからデータを取得してみます。

select * from user;

テーブルにカラムを追加する(5)

各データの address カラムの値には NULL が格納されていることが確認できました。

次に位置を指定してカラムを追加します。 name カラムのあとに age カラムを追加します。次のように実行してください。

alter table user add column age int after name;

テーブルにカラムを追加する(6)

user テーブルに age カラムが追加されました。

あらためてテーブルのカラムの並びを確認してみます。

テーブルにカラムを追加する(7)

テーブルの name カラムのあとに age カラムが追加されていることが確認できました。

テーブルからカラムを削除する

作成済みのテーブルからカラムを削除するには ALTER TABLE DROP 文を使用します。

ALTER [ONLINE] [IGNORE] TABLE [IF EXISTS] tbl_name
  DROP [COLUMN] [IF EXISTS] col_name [RESTRICT|CASCADE]

対象のテーブルから col_name のカラムを削除します。

それでは実際に試してみます。対象の user テーブルには現在のカラムの並びは次のようになっています。

show columns from user;

テーブルからカラムを削除する(1)

age カラムを削除します。次のように実行してください。

alter table user drop column age;

テーブルからカラムを削除する(2)

age カラムが削除されました。

あらためてテーブルのカラムの並びを確認してみます。

テーブルからカラムを削除する(3)

テーブルから age カラムが削除されたことが確認できました。

-- --

MariaDB で ALTER TABLE 文を使ってテーブル構造を変更する方法について解説しました。

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。