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

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

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

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

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

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

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

今回やりたいこと

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

今回のレポートは以上です。
読んでいただいてありがとうございました。


ホームページに関するお悩み事やご相談事がございましたら私どもまでご連絡ください。 鋭意ご対応申し上げます。
ホームページのご提案もさせていただいております