SQL ALTER TABLE — カラムの追加・削除・リネーム

ALTER TABLEを使用してカラムの追加、削除、リネーム、制約の変更を行う方法。PostgreSQL、MySQL、SQLiteの違いも解説します。

DDL Commands

詳細な説明

ALTER TABLEによるテーブル変更

要件の変更に伴い、テーブルを削除・再作成せずに既存のテーブルを変更する必要があります。ALTER TABLEは構造変更のためのDDLコマンドです。

よく使う操作

カラムの追加

ALTER TABLE employees
  ADD COLUMN phone VARCHAR(20);

カラムの削除

ALTER TABLE employees
  DROP COLUMN phone;

カラムのリネーム

ALTER TABLE employees
  RENAME COLUMN old_name TO new_name;

制約の追加

ALTER TABLE employees
  ADD CONSTRAINT fk_department
  FOREIGN KEY (department_id) REFERENCES departments(id);

ダイアレクト固有の動作

  • PostgreSQLは標準的なすべてのALTER操作をサポートし、ALTER COLUMN ... SET DATA TYPEALTER COLUMN ... SET DEFAULTも可能です。
  • MySQLはカラムのデータ型変更にMODIFY COLUMNを使用し、リネームと型変更を同時に行うにはCHANGE COLUMNを使用します。
  • SQLiteのALTER TABLEサポートは非常に限定的で、ADD COLUMN(全バージョン)、RENAME COLUMN(3.25+)、DROP COLUMN(3.35+)のみです。他の変更にはテーブルの再作成が必要です。

マイグレーションのベストプラクティス

データベースがトランザクショナルDDLをサポートする場合(PostgreSQLはサポート、MySQLはほとんどのDDLで非サポート)、ALTER文は必ずトランザクション内で実行してください。本番環境の前にステージング環境でテストしましょう。

ユースケース

既存のプロダクションテーブルに新しいカラムを追加する必要がある場合(例えば、ユーザーテーブルにphone_numberフィールドを追加する)で、既存データを失わずに行いたい場合。

試してみる — SQL Cheat Sheet

フルツールを開く