[あいまいな情報のサイト多し!] SQL文:テーブル構造を変更する(ALTER TABLE文、RENAME TABLE文)

SQL文は、phpMyAdminでは正常に実行されても、たとえばWebアプリ開発で同じSQL文を使用してもエラーになる場合がある。実開発で正常実行されるか?は要確認。

目次

[ズバリ結論!] ALTER TABLE文は、テーブル構造を変更できるが、あいまいな情報が多く、動作しないトラブル多発中

データベースにおけるテーブルの設計には後になって変更はつきもの。
また、複雑になるほどミス・ロスがおこりやすく、どうしても作成後にさまざまな変更の必要性も出やすい。

「DDL(Data Definition Language)」にカテゴライズされるALTER TABLE 文を使用すると、作成済みのテーブル構造を変更することができる。

カラムの追加や削除、制約の追加や削除、インデックスの追加や削除など、テーブルに対して色々な変更を加えることができる。

ところで、このALTER TABLEもあいまいな情報を載せたサイトが多く、動作しないトラブルが多発中。詳しくはカラムの追加(ADD)を参照。

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

作成済みのテーブルに対し、テーブル名の変更やカラム名の変更を行うには ALTER TABLE RENAME 文を使う。
RENAME COLUMN はカラム名だけしか変更できない。

テーブル名の変更
ALTER TABLE tablename RENAME [TO|AS] new_tablename;

※RENAME TABLE文で変更する場合
RENAME TABLE tablename TO new_tablename;

インデックス名の変更
ALTER TABLE tablename RENAME INDEX indexname TO new_indexname;

カラム名の変更
ALTER TABLE tablename RENAME COLUMN columnname TO new_columnname;

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

作成済みのテーブルに対し、カラムの定義を変更するにはALTER TABLE CHANGE文、またはALTER TABLE MODIFY文を使う。
CHANGEはカラム名と定義を同時に変更できるが、MODIFYはカラム定義だけしか変更できないから注意。

カラム名と定義の変更
ALTER TABLE tablename CHANGE [COLUMN] columnname new_colname column_definition;

カラム定義の変更
ALTER TABLE tablename MODIFY [COLUMN] columnname column_definition;

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

作成済みのテーブルに対し、新しいカラムを追加するにはALTER TABLE ADD文を使う。
誤情報が多いが、phpMyAdminでSQL文を走らせると以下だと正常に実行される。

どのカラムとどのカラムの間に追加するかを未指定(デフォルトは最後尾になる)
ALTER TABLE tablename ADD 追加するカラム名 varchar(10) NOT NULL;
※「COLUMN」を入れても同じ挙動。
ALTER TABLE tablename ADD COLUMN 追加するカラム名 varchar(10) NOT NULL;

〇「column_b」というカラムの後に追加する場合。NOT NULLがなければ正常に実行される。
ALTER TABLE tablename ADD 追加するカラム名 varchar(10) AFTER column_b;

×「column_b」というカラムの後に追加する場合。NOT NULLを記述するとエラーになる。
ALTER TABLE tablename ADD 追加するカラム名 varchar(10) NOT NULL AFTER column_b;

すべてのカラムの先頭に追加する場合。
ALTER TABLE tablename ADD 追加するカラム名 varchar(10) NOT NULL FIRST;

※注意! FIRSTの後にカラム名の記述をするとエラーになり、間違いやすい。「BEFORE」が存在せずFIRSTだけになっている理由、AFTERとFIRSTさえあればBEFORE(指定したカラムの前に挿入)という機能がなくても指定箇所すべてをカバーできるからだろう。
また、FIRSTの場合はNOT NULLが記述されていても正常に実行される。

複数のカラムを追加する場合
ALTER TABLE tablename ADD COLUMN 追加するカラム名1 varchar(100) NOT NULL DEFAULT 'hoge',
ADD COLUMN 追加するカラム名2 decimal(11,2) NOT NULL DEFAULT 0;

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

作成済みのテーブルからカラムを削除するにはALTER TABLE DROP文を使う。

ALTER TABLE tablename DROP COLUMN 削除するカラム名;

複数のカラムを削除
ALTER TABLE tablename DROP COLUMN column1,
                     DROP COLUMN column2;
目次
閉じる