テーブル定義を変更したい。インデックスが壊れてしまったので再作成したい。そんな場合はALTER TABLEを使う。ALTER TABLEはテーブル定義を変更するお馴染みのコマンドであるが、その挙動は意外と知られていない。(エキスパートとおぼしき方々からも度々質問を受ける。)そんなわけで、今日はALTER TABLEについて解説しようと思う。 まず結論から言うと、なんとMySQLのALTER TABLEはテーブルのデータを全てコピーし直すのである。なんて無駄なことを!?と思うかも知れないが、テーブル定義(スキーマ)の変更を動的に行うには、ストレージエンジンによるサポートが必要であり、動的なスキーマ変更をサポートしているストレージエンジンはまだ少ないのである。(動的スキーマ変更をサポートしているのはMySQL Clusterぐらいだ。しかも追加だけ。)デフォルトで利用出来るMyISAMはInn
![ALTER TABLEを上手に使いこなそう。](https://cdn-ak-scissors.b.st-hatena.com/image/square/43a7503923f34fab27b0677da801e1b95ad34697/height=288;version=1;width=512/https%3A%2F%2Fblogger.googleusercontent.com%2Fimg%2Fb%2FR29vZ2xl%2FAVvXsEjOcP9-xC0VQ5b6lyNiky2pAvXe3pfq6WzFuLuVLpkXsO_PczPpQJL-ZevtqHNoGhMsHg_zhxrXz8zv8lTtNzxtbGfb6Mk-Zm4-oA6SBZDaOmxdLgS9CmGqIy4kR_c6LIrK6jjJPeRSsPs%2Fs800%2Flogo.png)