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

広告
eyecatch

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

テーブル名/インデックス名/カラム名を変更する(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 文を使ってテーブル構造を変更する方法について解説しました。

MySQLの使い方の他の記事を見てみる

( Written by Tatsuo Ikura )

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

著者 / TATSUO IKURA

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