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 TYPEやALTER 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フィールドを追加する)で、既存データを失わずに行いたい場合。