ALTER TABLEについてメモ

現在進行中のプロジェクトのDBスキーマを修正しなくちゃいけなくて、変更内容を共有するために手動で差分たファイルを作るのですが、そのときのメモ。

カラム名/データ型を修正する

ALTER TABLE テーブル名 CHANGE 元カラム名 新カラム名 データ型
----
ALTER TABLE `unko` CHANGE `foo` `bar` integer

データ型のみ変えたい場合は同じカラム名を2回書く。カラム名のみ変えた場合でもデータ型は書く。

カラムを追加する

ALTER TABLE テーブル名 ADD カラム名 データ型 オプション
----
ALTER TABLE `unko` ADD `foo` varchar(255) NOT NULL DEFAULT 'bar'

外部キー制約を追加する

ALTER TABLE テーブル名 CONSTRAINT 制約名 FOREIGN KEY (カラム名) REFERENCES テーブル名 (カラム名);
----
ALTER TABLE `comments` CONSTRAINT FK_comments_article_id FOREIGN KEY (`article_id`) REFERENCES `articles` (`id`)

ここではまった。

ERROR 1005 (HY000) at line 19: Can't create table './unko/#sql-5414_10.frm' (errno: 150)

外部キー制約でエラーずっとはいてて、かなり悩んだ。原因はキー同士でデータ型が違ってたこと。上記の例で言えば、comments#article_idはINTEGER、articles#idはINTEGER UNSIGNEDだった、みたいな。

とりあえずさっき書いてたのはこれくらい。ALTERとかMODIFYとかまだあるけど、とりあえずタスクがまだ山ほど残ってるのでこれくらいで。