このページについて
このページではターミナル等を使ってテーブルの構造を変更する、ALTER TABLE構文の使い方を簡単に解説しています。
ALTER TABLEの機能
まずはALTER TABLEで出来る事を簡単に確認していきます。
- カラムの追加や削除
- インデックスの作成や破棄
- 既存カラムの型変更
- カラムやテーブルの名前変更
- テーブルに使われているストレージエンジンの変更
などが行えます。
カラムの追加
テーブル内の特定の位置にカラムを追加(挿入)する場合は以下のように入力します。それぞれ環境に合わせて適宜変更しましょう。
mysql>alter table テーブル名 add カラム名 データ型;
例えばtestというデータベースを選択した状態で[test1]というテーブルに[id]というカラムを付与する場合は以下のように書きます。
mysql>alter table test1 add id int;
テキスト等のデータ型を設定する場合はvarchar(20)のように型と文字数設定を入力する事でOKです。ちなみにこの追加方法は追加位置を指定していないため、末尾に挿入されます。位置を指定する場合はfirstやafterを使用します。
mysql>alter table テーブル名 add カラム名 データ型 first;
上記は「指定したテーブルの先頭にカラムを追加する」という指示になります。特定のカラムの後に追加する場合はafterを使ってカラム名を指定します。
mysql>alter table テーブル名 add カラム名 データ型 after カラム名2;
カラム名2は「既存のカラムの名前」です。まとめてカラムを追加する場合は以下のように書きます。
mysql>alter table テーブル名 add カラム名 データ型 追加位置,add カラム名2 データ型 追加位置;
追加位置は上記のfirstやafterです。
カラムの削除
次はカラムを削除する方法です。前提として、テーブルにカラムが1つしか無い場合はカラムを削除することはできません。カラムが2つ以上ある場合は削除対象にprimaryキーが付与されていようとも削除できます。
mysql>alter table テーブル名 drop カラム名;
複数のカラムを削除したい場合はそれぞれ指定する必要があります。
mysql>alter table テーブル名 drop カラム1, drop カラム2;
このように書きます。
カラムの位置変更
カラムの位置を変更する場合はmodifyを使います。
mysql>alter table テーブル名 modify 変更したいカラム名 データ型 変更位置 カラム名;
変更したいカラム名とデータ型はセットです。変更位置はfirstかafterで指定します。そして最後のカラム名は挿入位置となります。
カラムの型と名前変更
既存カラムの型変更と名前変更は同じ機能を使います。注意点として、primaryやuniqueなどのキー設定は維持されません。変更後のカラムの型にprimary keyなどを書く必要があります。まずは名前の変更から。
mysql>alter table テーブル名 change 変更前のカラム名 変更後のカラム名 変更後のカラムの型;
変更前後の名前はもちろん、変更後のカラム型も必須です。逆にカラムの型のみを変更したい場合も、カラムの名前はそれぞれ必要です。カラム名idの名前を変えずにカラムの型のみを変更する記述は以下のとおりです。
mysql>alter table テーブル名 change id id text;
これでidカラムの型がtextに変更されます。
テーブル名の変更
テーブル名を変更する場合、コピーやバックアップなどは作成せずにシンプルに名前を変更します。ただし変更後の各種権限設定に関しては引き継がれないため、手動で変更する必要があるようです。
mysql>alter table 変更前テーブル rename to 変更後テーブル;
キーの付与
作成済みのカラムに対してキーを付与する場合にもalter tableを使用します。まずは主キー(PRIMARY)の付与について。
mysql>alter table テーブル名 add primary key(カラム名);
次にUNIQUEキーの付与。
mysql>alter table テーブル名 add unique key(カラム名);
インデックスの付与。
mysql>alter table テーブル名 add index(カラム名);
キーの削除
作成済みキーを削除する場合、dropを使用します。プライマリーキーの削除は以下。
mysql>alter table テーブル名 drop primary key;
primaryキーはテーブルに1つしか存在しないため、カラム名などの指定はしなくてもこれでOKです。primary以外のキーを削除する場合は削除するインデックス名を直接指定します。そもそもインデックス名が不明な場合は先に確認します。
mysql>show index from テーブル名;
これを実行するとそのテーブルに存在する全てのキー情報が出力されます。今回はidというインデックスを削除したいとします。その場合は以下のように入力します。
mysql>alter table テーブル名 drop index id;
これで再びshow indexを実行すれば、キーが削除されているのが確認できます。
ストレージエンジンの変更
ストレージエンジンはテーブルに対するSQLを処理するコンポーネントです。デフォルトではInnoDBというものが機能しています。これらは通常は変更する必要はありませんが、alter tableの機能の1つなので軽く紹介しておきます。ストレージエンジンを変更するには以下のコマンドを実行します。
mysql>alter table テーブル名 engine = ストレージエンジン;
デフォルトのInnoDB以外だとMyISAMなどがあります。ちなみにInnoDBに対してInnoDBに変更のコマンドを実行するとデフラグ処理が行われます。
文字セットの変更
各テーブルで使用している文字セットの変更も行えます。これには2種類の方法があります。
mysql>alter table テーブル名 convert to character set セット名 照合順序;
mysql>alter table テーブル名 modify カラム名 データ型 character set セット名;
セット名は良く使われているのはutf8なんですが、これをutf32にしたい場合はutf32と入力します。照合順序は省略可能で、その場合は入力した文字セット名のルールが自動的に適用されます。
2つ目のmodifyを使用した方はカラム単位で変更する時に使います。1つ目のconvertはテーブル全部に影響するのに対し、modifyを使った方はカラム単位で変更ができます。
まとめ
alter tableはまだ他にも機能を持っていますが、随時更新していければなと思います。この中にある機能は全て独立した構文として使用出来るものもあったりしますが、alter tableの1つとして覚えておくのが楽かもしれません。
- MySQLの用語集
- MySQLでよく使う・よく見る用語集です。知っておくと検索とかも便利になります。
- ローカル環境の整え方
- MAMPを使ってローカル環境を整える方法を紹介。
- MySQLデータベースに接続する方法
- MAMPのデータベースと、レンタルサーバーのデータベースに接続する方法
- MySQLの基本コマンド
- MySQLへ接続してまず使う基本コマンドの一覧です。
- データベースの作成
- ターミナル・phpMyAdminでのデータベースの作成方法をそれぞれ解説。
- テーブルの作成
- ターミナル・phpMyAdminのそれぞれでテーブルを作成する方法と、作成と同時にPRIMARYやUNIQUEの付与などの方法を紹介。
- キーの種類と機能
- カラムに設定出来るキーの種類と機能を解説。
- 正規化
- リレーショナルデータベースを使う上で必須となる正規化について。データの追加や更新などで手間を省く方法としても使えます。
- ALTER TABLE
- ALTER TABLE構文を使って作成済みのテーブルに対して操作を行う。PRIMARYの付与やカラムの移動・名前変更・追加・削除なども行えます。
- INSERT構文
- INSERT構文を使って指定テーブルにデータ(行)を挿入する方法の解説です。
- UPDATE構文
- UPDATE構文を使って指定テーブルのカラムを一括更新、もしくは指定レコードの指定カラムのみを更新する方法の解説です。
- SELECT構文
- SELECT構文を使って指定したテーブルからデータを取得する方法の解説です。
- JOIN
- JOINを使ってテーブル同士を結合する方法の解説です。