3.

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構文
OracleALTER TABLE 表名 MODIFY (カラム名 データ型 [制約]);
MySQLALTER TABLE 表名 MODIFY COLUMN カラム名 データ型 [制約];
PostgreSQLALTER TABLE 表名 ALTER COLUMN カラム名 TYPE データ型;
SQL ServerALTER 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-changegh-ost など無停止ツールの利用を検討
  • 主キーや外部キーに関わるカラムは、参照する側のテーブルも合わせて変更が必要なことがある

関連 SQL

操作SQL
カラム追加ALTER TABLE 表 ADD (カラム データ型);
カラム削除ALTER TABLE 表 DROP COLUMN カラム;
カラム名変更ALTER TABLE 表 RENAME COLUMN 旧 TO 新;
テーブル名変更ALTER TABLE 旧 RENAME TO 新;

関連記事

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. 表の作成
  2. カラムの追加
  3. カラムの定義変更
  4. カラムの削除
  5. 表の削除

最近更新/作成されたページ