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;