MENU

【初心者向け】MySQLでテーブルに列を追加する方法を完全解説

データベースを運用していると、後から新しい項目を追加したくなることがよくあります。この記事では、MySQLでテーブルに列(カラム)を追加する方法を、初心者の方にもわかりやすく丁寧に解説します。

目次

MySQLで列を追加する基本コマンド

MySQLでテーブルに新しい列を追加するには、ALTER TABLE文を使用します。基本的な構文は以下の通りです。

ALTER TABLE テーブル名 ADD COLUMN 列名 データ型;

実際の使用例

例えば、usersというテーブルにメールアドレスを保存するemail列を追加する場合は、次のように書きます。

ALTER TABLE users ADD COLUMN email VARCHAR(255);

これだけで、usersテーブルに新しいemail列が追加されます。とてもシンプルですね。

制約を付けて列を追加する方法

実務では、単に列を追加するだけでなく、データの整合性を保つために制約を設定することが一般的です。

NOT NULL制約を付ける

空の値を許可したくない場合は、NOT NULL制約を付けます。

ALTER TABLE users ADD COLUMN age INT NOT NULL;

ただし、既にデータが入っているテーブルにNOT NULLの列を追加する場合は注意が必要です。デフォルト値を指定しないとエラーになることがあります。

デフォルト値を設定する

列を追加する際に、デフォルトで入る値を設定できます。

ALTER TABLE users ADD COLUMN status VARCHAR(20) DEFAULT 'active';

この例では、新しく作成されるレコードには自動的にstatus'active'という値が入ります。

NOT NULLとデフォルト値を両方設定する

最も安全な方法は、NOT NULL制約とデフォルト値を両方設定することです。

ALTER TABLE users ADD COLUMN created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP;

CURRENT_TIMESTAMPを使うと、レコードが作成された日時が自動的に記録されます。作成日時や更新日時を管理する列でよく使われるテクニックです。

列を追加する位置を指定する

MySQLでは、新しい列をどこに配置するかを指定できます。

テーブルの最初に追加する

ALTER TABLE users ADD COLUMN id INT FIRST;

FIRSTキーワードを使うと、テーブルの一番最初の列として追加されます。

特定の列の後ろに追加する

ALTER TABLE users ADD COLUMN phone VARCHAR(20) AFTER email;

AFTERキーワードを使うと、指定した列の直後に新しい列が追加されます。この例では、email列の後ろにphone列が追加されます。

列の順序は見た目の問題だけで、データベースのパフォーマンスには影響しません。しかし、テーブル構造を見やすく整理するために便利な機能です。

複数の列を一度に追加する

複数の列を追加したい場合は、カンマで区切って一度に実行できます。

ALTER TABLE users 
ADD COLUMN email VARCHAR(255),
ADD COLUMN phone VARCHAR(20),
ADD COLUMN address TEXT;

一つずつ実行するよりも効率的で、テーブルのロック時間も短縮できます。

よくある使用例

実務でよく使われるパターンをいくつか紹介します。

メールアドレス列の追加

ALTER TABLE users ADD COLUMN email VARCHAR(255) UNIQUE;

UNIQUE制約を付けることで、同じメールアドレスの重複登録を防げます。

ステータス管理列の追加

ALTER TABLE orders ADD COLUMN status ENUM('pending', 'processing', 'completed', 'cancelled') DEFAULT 'pending';

ENUM型を使うと、指定した値だけを許可できます。ステータス管理に便利です。

タイムスタンプ列の追加

ALTER TABLE products 
ADD COLUMN created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
ADD COLUMN updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;

作成日時と更新日時を自動管理する列です。ON UPDATE CURRENT_TIMESTAMPを付けると、レコード更新時に自動的に日時が更新されます。

外部キー列の追加

ALTER TABLE orders ADD COLUMN user_id INT;
ALTER TABLE orders ADD FOREIGN KEY (user_id) REFERENCES users(id);

他のテーブルと関連付けるための外部キー列を追加する場合の例です。

COLUMNキーワードは省略できる

実はCOLUMNキーワードは省略可能です。以下の2つは同じ意味になります。

ALTER TABLE users ADD COLUMN email VARCHAR(255);
ALTER TABLE users ADD email VARCHAR(255);

どちらを使っても問題ありませんが、COLUMNを付けた方が読みやすいと感じる人が多いようです。

注意点とベストプラクティス

既存データがある場合の注意点

テーブルに既にデータが入っている状態でNOT NULL列を追加する場合は、必ずデフォルト値を設定しましょう。そうしないと、既存のレコードに値が入らずエラーになる可能性があります。

-- 推奨される方法
ALTER TABLE users ADD COLUMN status VARCHAR(20) NOT NULL DEFAULT 'active';

-- 既存データがある場合、これはエラーになる可能性がある
ALTER TABLE users ADD COLUMN status VARCHAR(20) NOT NULL;

大規模テーブルでの実行

データ量が多いテーブルの場合、列の追加には時間がかかることがあります。本番環境で実行する際は以下の点に注意してください。

  • メンテナンス時間帯に実行する
  • 事前にテスト環境で実行時間を確認する
  • 可能であれば、サービスへの影響が少ない時間帯を選ぶ

バックアップを取る

テーブル構造を変更する前には、必ずバックアップを取りましょう。万が一問題が発生しても、すぐに元に戻せます。

-- テーブルのバックアップ例
CREATE TABLE users_backup AS SELECT * FROM users;

追加した列を確認する方法

列が正しく追加されたかを確認するには、以下のコマンドを使います。

DESCRIBE users;

または

SHOW COLUMNS FROM users;

これでテーブルの全ての列情報が表示され、新しく追加した列が含まれているか確認できます。

列の追加に失敗した場合のトラブルシューティング

エラー: Column already exists

同じ名前の列が既に存在する場合に出るエラーです。列名を変えるか、既存の列を変更したい場合はALTER TABLE ... MODIFYを使います。

エラー: Data too long for column

既存データがあるテーブルに、サイズの小さい列を追加しようとした場合に発生します。データ型のサイズを適切に設定しましょう。

テーブルがロックされている

他のプロセスがテーブルを使用中の場合、ALTER TABLEが待機状態になることがあります。この場合は、他の処理が終わるまで待つか、メンテナンス時間に実行するようにしましょう。

まとめ

MySQLでテーブルに列を追加する方法について解説しました。基本的な追加方法から、制約の設定、位置の指定まで、様々なパターンを紹介しました。

重要なポイントをまとめると以下の通りです。

  • 基本はALTER TABLE テーブル名 ADD COLUMN 列名 データ型
  • 制約(NOT NULL、DEFAULT、UNIQUEなど)を適切に設定する
  • 既存データがある場合はデフォルト値の設定を忘れずに
  • 大規模テーブルでは実行時間に注意する
  • 変更前には必ずバックアップを取る

データベースの運用では、後から列を追加することは非常によくあります。この記事で紹介した方法を使って、安全にテーブル構造を変更できるようになりましょう。

何か困ったことがあれば、まずは小さなテスト用テーブルで試してみることをおすすめします。実際に手を動かして練習することで、より理解が深まります。

プログラミングの独学におすすめ
プログラミング言語の人気オンラインコース
独学でプログラミングを学習している方で、エラーなどが発生して効率よく勉強ができないと悩む方は多いはず。Udemyは、プロの講師が動画で実際のプログラムを動かしながら教えてくれるオンライン講座です。講座の価格は、セール期間中には専門書籍を1冊買うよりも安く済むことが多いです。新しく学びたいプログラミング言語がある方は、ぜひUdemyでオンライン講座を探してみてください。
目次