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

広告

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

(2021 年 08 月 04 日公開 / 2021 年 08 月 04 日更新)

テーブル名を変更する

作成済みのテーブル名の変更を行うには 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 )

関連記事 (一部広告含む)
Profile
profile_img

著者 / TATSUO IKURA

初心者~中級者の方を対象としたプログラミング方法や開発環境の構築の解説を行うサイトの運営を行っています。