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

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

(Last modified: )

テーブル名/インデックス名/カラム名を変更する(ALTER TABLE RENAME文)

作成済みのテーブルに対してテーブル名の変更やカラム名の変更を行うには ALTER TABLE RENAME 文を使います。書式は次の通りです。

テーブル名の変更
ALTER TABLE tbl_name
 RENAME [TO|AS] new_tbl_name

インデックス名の変更
ALTER TABLE tbl_name
 RENAME INDEX old_index_name TO new_index_name

カラム名の変更
ALTER TABLE tbl_name
 RENAME COLUMN old_col_name TO new_col_name

ではテーブル名とカラム名の変更を実際に試してみます。次のようなテーブルを作成しました。現在作成されているテーブルは staff テーブルだけです。

create table staff (id int, name varchar(10), index id_index(id));

テーブル名/インデックス名/カラム名を変更する(ALTER TABLE RENAME文)(1)

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

alter table staff rename to member;

テーブル名/インデックス名/カラム名を変更する(ALTER TABLE RENAME文)(2)

テーブル変更後にテーブル一覧を確認してみると member テーブルだけが作成されており、 staff テーブルから member テーブルへの変更が行われていることが確認できます。

※ テーブルに対して権限をユーザーに与えていた場合、テーブル名の変更をしても権限は自動的には更新されません。手動で権限を再設定する必要があります。

-- --

次にカラム名を変更します。次のように実行してください。

alter table member rename column name to staffname;

テーブル名/インデックス名/カラム名を変更する(ALTER TABLE RENAME文)(3)

カラム名が変更されました。変更後に SHOW CREATE TABLE 文で確認してみると、カラム名が変更されていることが確認できます。

カラムの定義を変更する(ALTER TABLE CHANGE文、 ALTER TABLE MODIFY文)

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

カラム名と定義の変更
ALTER TABLE tbl_name
 CHANGE [COLUMN] old_col_name new_col_name column_definition

カラム定義の変更
ALTER TABLE tbl_name
 MODIFY [COLUMN] col_name column_definition

CHANGE はカラム名と定義を同時に変更することができます。 MODIFY はカラム定義だけを変更します。また先に解説した RENAME COLUMN はカラム名だけを変更します。用途に応じて使い分けてください。

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

create table staff (id int not null, name varchar(10) default 'NoData');

カラムの定義を変更する(ALTER TABLE CHANGE文、 ALTER TABLE MODIFY文)(1)

最初に ALTER TABLE CHANGE文 を使ってカラム名と定義を変更します。次のように実行してください。

alter table staff change id staffid bigint unique;

カラムの定義を変更する(ALTER TABLE CHANGE文、 ALTER TABLE MODIFY文)(2)

id カラムの名前を staffid に変更し、 id カラムの定義を id int not null から id staffid bigint unique へ変更しました。変更前と変更後で比較してみると、カラム名とカラム定義が変更されていることが確認できます。

変更前
Create Table: CREATE TABLE `staff` (
  `id` int(11) NOT NULL,
  `name` varchar(10) DEFAULT 'NoData'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

変更後
Create Table: CREATE TABLE `staff` (
  `staffid` bigint(20) DEFAULT NULL,
  `name` varchar(10) DEFAULT 'NoData',
  UNIQUE KEY `staffid` (`staffid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

-- --

次に ALTER TABLE MODIFY 文を使ってカラム定義を変更します。次のように実行してください。

alter table staff modify name varchar(20);

テーブル名/インデックス名/カラム名を変更する(ALTER TABLE RENAME文)(3)

name カラムの定義を name varchar(10) default 'NoData' から name varchar(20) へ変更しました。変更前と変更後で比較してみると、カラム定義が変更されていることが確認できます。

変更前
Create Table: CREATE TABLE `staff` (
  `staffid` bigint(20) DEFAULT NULL,
  `name` varchar(10) DEFAULT 'NoData',
  UNIQUE KEY `staffid` (`staffid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

変更後
Create Table: CREATE TABLE `staff` (
  `staffid` bigint(20) DEFAULT NULL,
  `name` varchar(20) DEFAULT NULL,
  UNIQUE KEY `staffid` (`staffid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

カラム定義を変更する場合、新しい定義で上書きされます。例えば変更前にカラムに DEFAULT 制約が設定されており、変更後も DEFAULT 制約を設定したい場合には、新しい定義で明示的に設定する必要があります。

カラムを追加する(ALTER TABLE ADD文)

作成済みのテーブルに対して新しいカラムを追加するには ALTER TABLE ADD 文を使います。書式は次の通りです。

ALTER TABLE tbl_name
  ADD [COLUMN] col_name column_definition
  [FIRST | AFTER col_name]

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

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

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

insert into product values(1, 'Display');
insert into product values(2, 'Mouse');
insert into product values(3, 'Keyboard');

カラムを追加する(ALTER TABLE ADD文)(1)

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

show columns from product;

カラムを追加する(ALTER TABLE ADD文)(2)

それではカラムを追加します。テーブルの最後に追加します。

alter table product add color varchar(10);

カラムを追加する(ALTER TABLE ADD文)(3)

テーブルからデータを取得してみると、新しく追加されたカラムの値にはデフォルトの値である NULL が格納されています。

select * from product;

カラムを追加する(ALTER TABLE ADD文)(4)

カラムの並びを確認すると、今回位置を指定せずにカラムを追加したのでテーブルの最後に追加されています。

カラムを追加する(ALTER TABLE ADD文)(5)

-- --

もう一つカラムを追加します。今度は id カラムの次に追加します。

alter table product add price int after id;

カラムを追加する(ALTER TABLE ADD文)(6)

カラムの並びを確認すると、指定した id カラムの値に新しいカラムが追加されています。

カラムを追加する(ALTER TABLE ADD文)(7)

カラムを削除する(ALTER TABLE DROP文)

作成済みのテーブルからカラムを削除するには ALTER TABLE DROP 文を使います。書式は次の通りです。

ALTER TABLE tbl_name
  DROP [COLUMN] col_name

指定したカラムをテーブルから削除します。

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

create table product (id int, name varchar(10), color varchar(10));

カラムを削除する(ALTER TABLE DROP文)(1)

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

show columns from product;

カラムを削除する(ALTER TABLE DROP文)(2)

それではカラムを削除します。 name カラムを削除してみます。

alter table product drop name;

カラムを追加する(ALTER TABLE ADD文)(3)

カラムの並びを再度確認してみます。

カラムを削除する(ALTER TABLE DROP文)(4)

name カラムが削除されていることが確認できました。

-- --

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

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。