MySQLで列の追加、データ型、制約を変更する方法

MySQL > MySQLで列の追加、データ型、制約を変更する方法

mysql文によるテーブル、カラム(列)においての様々な処理方法について解説します。

テーブル名の変更方法

ALTER TABLE テーブル名 RENAME TO 新しいテーブル名;

新しいカラム(列)と制約の追加方法

ALTER TABLE テーブル名 ADD 列名 型名 制約;

カラムの挿入位置はFIRSTやAFTERで基点となるカラム名を指定することで任意場所に挿入することができます。
下記は既存のcolumin1カラムの後にcolumin2カラムを挿入させる例です。

ALTER TABLE table1 ADD COLUMN columin2 VARCHAR(256) NOT NULL AFTER columin1;

既存のカラムの構造(列名、型、制約)の変更方法

ALTER TABLE <テーブル名> CHANGE COLUMN <既存の列名> <新しい列名> <型名> <制約>;

下記はtable1テーブルのidカラムをpage_idカラムへと列名を変更し、データ型をINTとし、値がNOT NULL、つまり値が未設定を認めない制約を与え、自動連番を設定しています。

ALTER TABLE table1 CHANGE COLUMN id page_id INT(10) NOT NULL AUTO_INCREMENT;

列名を変更せずにデータ型、制約の変更のみを行いたい場合はMODIFY句を使うほうが記述が少なく簡単です。

ALTER TABLE テーブル名 MODIFY COLUMN 既存の列名 新しいデータ型名 制約;

下記はintデータ型をUNSIGNEDとすることで正の数しか格納できないように変更しています。(負の数を拒否することで範囲は2倍になります)

ALTER TABLE table1 MODIFY COLUMN page_id int(10) unsigned NOT NULL;

任意のカラムを削除する方法。

ALTER TABLE <テーブル名> DROP COLUMN <対象の列名>;

下記はtable1テーブルのcolumin2カラムを削除するsql文です。

ALTER TABLE table1 DROP COLUMN columin2;

インデックスの確認方法。

SHOW INDEX FROM テーブル名;

インデックスを使用して検索しているかの確認方法。

EXPLAIN SELECT * FROM テーブル名 WHERE インデックスが付加されたカラム名="値";

下記はcolumin1カラムに”abc”で検索をかけています。

EXPLAIN SELECT * FROM table1 WHERE colomin1="abc";

possible keysにインデックス名が表示されればインデックスが働いています。

インデックスの削除

drop index インデックス名 on テーブル名;

下記はtable1テーブルからcolumin1_idxインデックスを削除しています。

DROP index columin1_idx on table1;