この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:3
更新日時:2026-08-07 17:13:40
タイトル: カラムの定義変更
SEOタイトル: SQLでカラム定義を変更|ALTER TABLE MODIFY・ALTER COLUMN
| この記事の要点 |
- 既存テーブルのカラムを変更するには
ALTER TABLE 文を使う — データ型 / NULL 許可 / 既定値などを変更可能 - Oracle / MySQL:
ALTER TABLE 表名 MODIFY (カラム名 データ型 [制約]) - PostgreSQL / SQL Server:
ALTER TABLE 表名 ALTER COLUMN カラム名 ... - 桁数を縮める / 型を変える場合は既存データとの互換性に注意(縮小不可・暗黙キャスト失敗)
- 本番ではテーブルロック / 再構築が発生することがあるため、変更時間とサービス影響を事前に評価
|
カラム定義変更とは
既存テーブルのカラムのデータ型 / 桁数 / NULL 許可 / デフォルト値などを変更したいときに使う SQL です。テーブル設計が後から変わったとき、データ移行や仕様変更に伴って利用します。
DB ごとの構文の違い
| DB | 構文 |
| Oracle | ALTER TABLE 表名 MODIFY (カラム名 データ型 [制約]); |
| MySQL | ALTER TABLE 表名 MODIFY COLUMN カラム名 データ型 [制約]; |
| PostgreSQL | ALTER TABLE 表名 ALTER COLUMN カラム名 TYPE データ型; |
| SQL Server | ALTER TABLE 表名 ALTER COLUMN カラム名 データ型 [制約]; |
Oracle の例
-- データ型 / 桁数の変更
ALTER TABLE test_table MODIFY (col1 VARCHAR2(20));
-- NULL 許可 / NOT NULL の切り替え
ALTER TABLE test_table MODIFY (col1 VARCHAR2(20) NOT NULL);
-- デフォルト値の変更
ALTER TABLE test_table MODIFY (col1 DEFAULT 'unknown');
-- 複数カラムを一括変更
ALTER TABLE test_table MODIFY (
col1 VARCHAR2(20) NOT NULL,
col2 NUMBER(8,2)
);
MySQL の例
-- 型と桁数を変更
ALTER TABLE users MODIFY COLUMN nickname VARCHAR(64) NOT NULL;
-- リネームを伴う変更(CHANGE COLUMN)
ALTER TABLE users CHANGE COLUMN nickname display_name VARCHAR(64) NOT NULL;
PostgreSQL の例
-- 型変更
ALTER TABLE users ALTER COLUMN age TYPE BIGINT USING age::BIGINT;
-- NOT NULL の追加 / 解除
ALTER TABLE users ALTER COLUMN email SET NOT NULL;
ALTER TABLE users ALTER COLUMN email DROP NOT NULL;
-- DEFAULT の追加 / 解除
ALTER TABLE users ALTER COLUMN status SET DEFAULT 'active';
ALTER TABLE users ALTER COLUMN status DROP DEFAULT;
SQL Server の例
-- 型変更
ALTER TABLE Users ALTER COLUMN Nickname NVARCHAR(64) NOT NULL;
-- DEFAULT は制約として別途追加
ALTER TABLE Users ADD CONSTRAINT DF_Users_Status DEFAULT('active') FOR Status;
注意点
- 桁数の縮小: 既存データが新しい桁数を超える場合はエラー。データ確認と必要に応じた更新が先
- 型変更:
NUMBER → VARCHAR2 など暗黙変換できない場合は変換できないか PostgreSQL のように USING 句が必要
- NOT NULL 追加: 既存に NULL があるとエラー。デフォルト値設定 + UPDATE で埋めてから NOT NULL 化する手順が一般的
- テーブルロック / 再構築: 一部の DBMS では裏でテーブル再構築が走り、大きなテーブルでは長時間ロックされる。本番では
pt-online-schema-change や gh-ost など無停止ツールの利用を検討
- 主キーや外部キーに関わるカラムは、参照する側のテーブルも合わせて変更が必要なことがある
関連 SQL
| 操作 | SQL |
| カラム追加 | ALTER TABLE 表 ADD (カラム データ型); |
| カラム削除 | ALTER TABLE 表 DROP COLUMN カラム; |
| カラム名変更 | ALTER TABLE 表 RENAME COLUMN 旧 TO 新; |
| テーブル名変更 | ALTER TABLE 旧 RENAME TO 新; |
関連記事