テーブル構造を変更する(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 staff rename to member;
テーブル変更後にテーブル一覧を確認してみると member テーブルだけが作成されており、 staff テーブルから member テーブルへの変更が行われていることが確認できます。
※ テーブルに対して権限をユーザーに与えていた場合、テーブル名の変更をしても権限は自動的には更新されません。手動で権限を再設定する必要があります。
-- --
次にカラム名を変更します。次のように実行してください。
alter table member rename column name to staffname;
カラム名が変更されました。変更後に 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 staff change id staffid bigint unique;
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);
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');
現在のカラムの並びは次のようになっています。
show columns from product;
それではカラムを追加します。テーブルの最後に追加します。
alter table product add color varchar(10);
テーブルからデータを取得してみると、新しく追加されたカラムの値にはデフォルトの値である NULL が格納されています。
select * from product;
カラムの並びを確認すると、今回位置を指定せずにカラムを追加したのでテーブルの最後に追加されています。
-- --
もう一つカラムを追加します。今度は id カラムの次に追加します。
alter table product add price int after id;
カラムの並びを確認すると、指定した id カラムの値に新しいカラムが追加されています。
カラムを削除する(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));
現在のカラムの並びは次のようになっています。
show columns from product;
それではカラムを削除します。 name カラムを削除してみます。
alter table product drop name;
カラムの並びを再度確認してみます。
name カラムが削除されていることが確認できました。
-- --
ALTER TABLE 文を使ってテーブル構造を変更する方法について解説しました。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
プログラミングや開発環境構築の解説サイトを運営しています。