ホームページ制作 オフィスオバタ

MYSQLでカラムの型をあとから変更する

MYSQLを使用してプログラムを作っていると、たまに「カラムの型変更」をしなければいけないことがります。

よくあるのが、textカラムだと文字数が足りずlongtextに変更するなどです。

開発初期であれば、データも入っていないのでMYSQLテーブルを削除して、新たに直したテーブルを追加すればよいのです。

が、実機にデータをそこそこ大量に登録していた場合、この方法はためらいます。
なぜならば、データを1から登録しなおさなければいけないからです。

データを消さずにカラムの型変更したい。
そんな方法がないか調べてみました。

ちなみに型変更する場所が1ヵ所程度であれば、phpmyadminを使用するほうが早いです。
ただ今回数十箇所、カラムの型変更があったためSQL文で何とかできないか調べました。

今回やりたいこと

上記のようなテーブルがある場合に、tinytextをtextに変更します。
これをSQL文で実行します。

カラムの型を変更するSQL文

調べてみると、カラムの型を変更するには「MODIFY」を使用すればできるとありました。
具体的には次のように記述します。

ALTER TABLE [テーブル名] MODIFY COLUMN memo text;

ALTERは、カラム追加などテーブルの構造を変更する場合に使用するSQLです。
MODIFY句は、ズバリ絡むの型を変更する命令です。
今回の目的にピッタリの句でした。

これを実行したところ、以下のように型が変更できました。

型変更の基本はこんなところですが、本題は「数十カ所の型を変更する」という点です。

本当にやりたいことは一度にたくさんの型を1文で変更すること

この手の解説記事はたいてい1カ所の型変更についてのみ書かれています。
でも1カ所だけならば、phpmyadminでやったほうが早いです。

カラムの型変更が数十カ所あるからSQL文で実行したいのです。
ということで、複数箇所の型変更を1回のSQL文で実行する方法を調べました。

このテーブルの複数のtinytextを1回のSQLでtextに型変更します

複数の型を一度に変更します。

調べてみたら、MODIFY句をただ並べるだけでした

複数の型変更を1回のSQLで実行するのって、どうやるんだろうと考えました。
INSERTの場合は、なかなか文法に悩まされました。
DELTEの場合は、WHEREを駆使する形でした。

型変更はどうすればいいのか?

調べたら「力技でOK」でした。

記述方法は次の通りです。

ALTER TABLE [テーブル名] MODIFY COLUMN memo01 text, MODIFY COLUMN memo02 text, MODIFY COLUMN memo03 text;

MODIFY句をカンマ(,)で区切ってつなげるだけです。
100箇所あれば、MODIFY句を100回記述します。

このSQLを実行したところ、以下のようにまとめて型変更できました。

MODIFY句は複数まとめて使用することで威力を発揮します

今回1データのカラムが400ほどあり、そのうち100カラムほど型変更が必要になりました。
しかも実機にデータを登録してしまっていたので、テーブル削除はできない状況でした。

最初はphpmyadminでやろうかとも思いましたが、あまりにも面倒なのでSQL文で実行することにしました。

どうやればいいのかを調べることから始めましたが、やり方がわかれば後は早かったです。
テスト環境で動作することを確認し、実機で実行しものの数秒で100カラムもの型変更が完了しました。

しかもデータはそのまま。

データ構造は後から変更しないに越したことはありませんが、もし変更しなければならない場合にもMYSQLにはそれなりに対応策があるということを学びました。

本記事がまたお役に立てば幸いです。

モバイルバージョンを終了