テーブル構造を変更する(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;
新しいテーブルを作成しました。テーブルの中の id カラムには UNIQUE 制約が設定されています。
drink テーブルの名前を water という名前に変更します。次のように実行してください。
alter table drink rename to water;
テーブル名の変更が完了しました。
それでは改めて作成済みのテーブルの一覧を取得してみます。
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;
3 つのカラムが含まれていることが確認できました。この中の id カラムの名前を drinkid に変更します。次のように実行してください。
alter table water rename column id to drinkid;
カラムの名前が id から drinkid に変更されました。
それではあらためて water テーブルに含まれるカラムの一覧を取得してみます。
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
それでは name カラムの定義を次のように変更してみます。
変更前: name varchar(10) DEFAULT NULL 変更後: name varchar(20) NOT NULL DEFAULT 'Unknown'
次のように実行してください。
alter table water modify name varchar(20) not null default 'Unknown';
name カラムの定義が変更されました。
それではあらためてテーブルに含まれるカラムの定義を確認してみます。
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');
現在のカラムの並びは次のようになっています。
show columns from user;
それではカラムを追加します。まずは追加する位置を指定せずにカラムを追加します。次のように実行してください。
alter table user add column address varchar(10);
user テーブルに address カラムが追加されました。位置を指定していないのでテーブルの最後に追加されています。
あらためてテーブルのカラムの並びを確認してみます。
テーブルの最後に address カラムが追加されていることが確認できました。
テーブルにデータが追加されている状態でテーブルにカラムを追加すると、既に追加されていたデータの追加したカラムにはデフォルトの値が格納されます。今回、新しく追加したカラムのデフォルトの値を指定していないので NULL が自動的に格納されます。実際にテーブルからデータを取得してみます。
select * from user;
各データの address カラムの値には NULL が格納されていることが確認できました。
次に位置を指定してカラムを追加します。 name カラムのあとに age カラムを追加します。次のように実行してください。
alter table user add column age int after name;
user テーブルに age カラムが追加されました。
あらためてテーブルのカラムの並びを確認してみます。
テーブルの 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;
age カラムを削除します。次のように実行してください。
alter table user drop column age;
age カラムが削除されました。
あらためてテーブルのカラムの並びを確認してみます。
テーブルから age カラムが削除されたことが確認できました。
-- --
MariaDB で ALTER TABLE 文を使ってテーブル構造を変更する方法について解説しました。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。