MEDIA

メディア

  1. TOP
  2. メディア
  3. プログラミング
  4. SQLでカラム名を変更する方法|DB別ALTER TABLE構文と注意点

SQLでカラム名を変更する方法|DB別ALTER TABLE構文と注意点

CONTENTS

SQLでカラム名を変更したいとき、「ALTER TABLEを使えばよい」と分かっていても、実際には次のような不安が出てくるのではないでしょうか。

「MySQLとPostgreSQLで書き方は同じなのか」

「SQL ServerではALTER TABLEではなく別の方法を使うのか」

「カラム名を変更したら、ビューやアプリ側のSQLは壊れないのか」

「型やDEFAULT、NOT NULL制約も一緒に変更してよいのか」

カラム名の変更は、SQL文だけを見ると単純です。しかし実務では、テーブル定義、制約、インデックス、ビュー、ストアドプロシージャ、アプリケーションコード、バッチ処理、BIツールなど、多くの箇所に影響する可能性があります。

この記事では、SQLでカラム名を変更する基本から、MySQL/PostgreSQL/SQL Server/Oracleごとの構文、実行前の確認観点、定義変更を伴う場合の注意点、よくあるエラーと安全な進め方までを実務目線で解説します。

SQLでカラム名を変更する基本

SQLでカラム名を変更する場合、多くのデータベースではALTER TABLEを使います。

ただし、すべてのDBで同じ構文が使えるわけではありません。

代表的には、次のような違いがあります。

-- PostgreSQL / Oracle
ALTER TABLE テーブル名 RENAME COLUMN 旧カラム名 TO 新カラム名;
-- MySQL
ALTER TABLE テーブル名 RENAME COLUMN 旧カラム名 TO 新カラム名;
-- MySQLの従来形式
ALTER TABLE テーブル名 CHANGE 旧カラム名 新カラム名 データ型;
-- SQL Server
EXEC sp_rename 'スキーマ名.テーブル名.旧カラム名', '新カラム名', 'COLUMN';

PostgreSQLでは、公式ドキュメントでもカラム名変更の例としてALTER TABLE products RENAME COLUMN product_no TO product_number;が紹介されています。PostgreSQLのALTER TABLEにおけるRENAMEは、列名を変更しても保存済みデータ自体には影響しない操作です。参考情報として、PostgreSQL公式ドキュメントではALTER TABLERENAME形式が解説されています。

https://www.postgresql.org/docs/current/ddl-alter.html

一方、SQL Serverではsp_renameを使う方法が一般的です。Microsoft公式ドキュメントでも、列名変更にはsp_renameを使う方法が案内されています。

https://learn.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-rename-transact-sql

つまり、「SQLでカラム名を変更する」といっても、実際には使用しているDB製品に合わせて構文を選ぶ必要があります。

カラム名を変更する前に確認すべきこと

変更対象のカラムがどこで使われているか確認する

カラム名変更で最も多いトラブルは、SQL文そのものの失敗ではなく、変更後に古いカラム名を参照している処理が壊れることです。

たとえば、次のような箇所に旧カラム名が残っていると、変更後にエラーが発生します。

  • アプリケーション側のSQL
  • ORMのモデル定義
  • ビュー
  • ストアドプロシージャ
  • 関数
  • トリガー
  • バッチ処理
  • 帳票出力処理
  • BIツールや分析用クエリ
  • テストコード
  • マイグレーションファイル
  • ドキュメントや仕様書

特に注意したいのが、動的SQLです。

ソースコード上で単純にold_column_nameのように検索しても、文字列連結や変数経由でSQLを組み立てている場合は見落とす可能性があります。

そのため、実務では次のように複数の観点で確認するのが安全です。

1. リポジトリ全体で旧カラム名を検索する
2. DB内のビュー・関数・ストアド・トリガー定義を検索する
3. 実行ログやSQLログから実際に投げられているSQLを確認する
4. 影響する画面・API・バッチを一覧化する
5. 変更後に確認すべきテストケースを作る

カラム名変更は「DBだけの作業」ではなく、「DBとアプリケーションの接続部分を変更する作業」と考えることが重要です。

テーブルサイズとロック時間を確認する

カラム名の変更は、データの中身を書き換える操作ではない場合もあります。

しかし、DDLである以上、実行時にテーブルロックやメタデータロックが発生する可能性があります。

特に、次のようなテーブルでは注意が必要です。

  • レコード件数が多いテーブル
  • 常時アクセスされるテーブル
  • 更新頻度が高いテーブル
  • 業務時間中に停止できないテーブル
  • APIや管理画面の主要処理で使われるテーブル

本番環境でいきなり実行するのではなく、事前に開発環境やステージング環境で実行時間を測定しておくべきです。

また、メンテナンス時間を確保できる場合は、アクセスが少ない時間帯に実施するのが安全です。

バックアップと切り戻し手順を用意する

カラム名変更は、失敗した場合にすぐ戻せるようにしておく必要があります。

最低限、次の2つは用意しておきましょう。

-- 変更SQL
ALTER TABLE users RENAME COLUMN fullname TO full_name;
-- 切り戻しSQL
ALTER TABLE users RENAME COLUMN full_name TO fullname;

ただし、切り戻しは単にカラム名を戻せば終わりとは限りません。

アプリケーション側の修正、マイグレーション履歴、ビューの再作成、キャッシュ、デプロイ順序なども関係します。

そのため、切り戻し手順は次のように作業単位で整理しておくと安全です。

1. アプリケーションを旧バージョンへ戻す
2. DBカラム名を旧名へ戻す
3. ビューやストアドの定義を戻す
4. バッチやジョブを再開する
5. 主要画面・APIの動作確認を行う

カラム名変更は、実行前の準備がそのまま品質に直結します。

MySQLでカラム名を変更する方法

MySQLのRENAME COLUMNを使う方法

MySQLでは、環境によってRENAME COLUMNを使ってカラム名を変更できます。

ALTER TABLE users RENAME COLUMN fullname TO full_name;

このSQLでは、usersテーブルのfullnameカラムをfull_nameに変更しています。

MySQL公式ドキュメントでは、CHANGEまたはRENAME COLUMNによってカラム名を変更した場合、古いカラムを参照するインデックスや外部キーなど一部の参照は自動的に変更される一方、ビューやストアドプログラムなどは手動変更が必要になる場合があると説明されています。

https://dev.mysql.com/doc/refman/8.0/en/alter-table.html

つまり、MySQL側で一部の依存関係が自動的に追従する場合があっても、「すべてが自動で直る」と考えるのは危険です。

MySQLのCHANGEを使う方法

MySQLでは、従来からCHANGEを使ってカラム名を変更する方法もよく使われます。

ALTER TABLE users CHANGE fullname full_name VARCHAR(100) NOT NULL;

CHANGEを使う場合は、旧カラム名、新カラム名に加えて、データ型やNULL可否などのカラム定義を指定します。

このとき最も注意すべきなのは、既存のカラム定義を正確に書くことです。

たとえば、もともとの定義が次のようになっていたとします。

fullname VARCHAR(100) NOT NULL DEFAULT ''

それにもかかわらず、次のようにDEFAULTを書き忘れると、意図せず定義が変わってしまう可能性があります。

ALTER TABLE users CHANGE fullname full_name VARCHAR(100) NOT NULL;

そのため、MySQLでCHANGEを使う前には、必ず現在のテーブル定義を確認しましょう。

SHOW CREATE TABLE users;

または、information_schemaから確認する方法もあります。

SELECT
  COLUMN_NAME,
  COLUMN_TYPE,
  IS_NULLABLE,
  COLUMN_DEFAULT,
  EXTRA
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = 'database_name'
  AND TABLE_NAME = 'users'
  AND COLUMN_NAME = 'fullname';

CHANGEを使う場合は、「名前だけ変えるつもりだったのに、型やDEFAULTまで変わってしまった」という事故が起きやすいため、レビュー時にも注意が必要です。

MySQLでの実務的な進め方

MySQLでカラム名を変更する場合は、次の流れがおすすめです。

1. MySQLのバージョンを確認する
2. RENAME COLUMNが使えるか確認する
3. CHANGEを使う場合はSHOW CREATE TABLEで現行定義を確認する
4. 旧カラム名を参照しているビュー・ストアド・アプリコードを洗い出す
5. ステージング環境でDDLを実行する
6. 主要機能をテストする
7. 本番環境でメンテナンス時間内に実行する

MySQLではバージョンやテーブル構造によって適切な書き方が変わるため、必ず対象環境の公式情報を確認してから実行してください。

PostgreSQLでカラム名を変更する方法

PostgreSQLの基本構文

PostgreSQLでカラム名を変更する場合は、ALTER TABLE ... RENAME COLUMN ... TO ...を使います。

ALTER TABLE users RENAME COLUMN fullname TO full_name;

スキーマ名を明示する場合は、次のように書きます。

ALTER TABLE public.users RENAME COLUMN fullname TO full_name;

スキーマが複数ある環境では、意図しないテーブルを変更しないためにも、スキーマ名を明示した方が安全です。

PostgreSQL公式ドキュメントでは、列名変更はALTER TABLE products RENAME COLUMN product_no TO product_number;のように記述する例が示されています。

https://www.postgresql.org/docs/current/ddl-alter.html

PostgreSQLで注意すべき依存関係

PostgreSQLでカラム名を変更する場合も、ビュー、関数、トリガー、アプリケーションSQLなどへの影響確認が必要です。

特に、次のようなケースでは注意が必要です。

・ビューが旧カラム名を参照している
・関数内のSQLが旧カラム名を参照している
・トリガー関数で旧カラム名を使っている
・アプリケーションのSELECT句やORDER BY句に旧カラム名が残っている
・CSV出力や帳票出力で旧カラム名を前提にしている

PostgreSQLはDDLをトランザクション内で扱える場面が多いため、検証環境ではトランザクションを使って確認することもあります。

BEGIN;
ALTER TABLE public.users RENAME COLUMN fullname TO full_name;
-- 動作確認用SQLを実行
ROLLBACK;

ただし、本番作業ではロックや実行時間の問題があるため、単純にトランザクションで囲めば安全というわけではありません。

本番では、事前検証、メンテナンス枠、監視、切り戻し手順をセットで用意しましょう。

SQL Serverでカラム名を変更する方法

SQL Serverではsp_renameを使う

SQL Serverでカラム名を変更する場合は、sp_renameを使います。

EXEC sp_rename 'dbo.Users.fullname', 'full_name', 'COLUMN';

この例では、dboスキーマのUsersテーブルにあるfullnameカラムをfull_nameに変更しています。

Microsoft公式ドキュメントでも、sp_renameを使ってユーザーオブジェクト内の列を変更する方法が説明されています。また、SQL Serverで列名を変更するには対象オブジェクトへのALTER権限が必要です。

https://learn.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-rename-transact-sql

https://learn.microsoft.com/en-us/sql/relational-databases/tables/rename-columns-database-engine

SQL Serverで特に注意すべき点

SQL Serverでカラム名を変更する場合、依存しているオブジェクトが自動で完全に更新されるとは限りません。

たとえば、ビューやストアドプロシージャの定義、動的SQL、アプリケーション側のSQLには旧カラム名が残る可能性があります。

そのため、カラム名変更後には次の確認が重要です。

・ビューが正常に動作するか
・ストアドプロシージャが正常に実行できるか
・アプリケーションの主要画面でエラーが出ないか
・バッチ処理が正常終了するか
・帳票やCSV出力に影響がないか

特にストアドプロシージャは、定義上は残っていても、実行するまでエラーが見えにくいことがあります。

そのため、「変更できたから完了」ではなく、「実際に主要処理を実行して確認する」ことが大切です。

Oracleでカラム名を変更する方法

Oracleの基本構文

Oracleでカラム名を変更する場合は、次のように書きます。

ALTER TABLE users RENAME COLUMN fullname TO full_name;

Oracle公式ドキュメントでは、rename_column_clauseを使ってテーブルの列名を変更できることが説明されています。新しいカラム名は、同じテーブル内の他のカラム名と重複できません。

https://docs.oracle.com/en/database/oracle/oracle-database/12.2/sqlrf/ALTER-TABLE.html

Oracleで注意すべき依存オブジェクト

Oracleでは、ビュー、シノニム、ストアドプロシージャ、ファンクション、パッケージなど、依存オブジェクトの確認が重要です。

カラム名変更後、依存オブジェクトが無効化されたり、再コンパイルが必要になったりする場合があります。

実務では、次のような流れで確認します。

1. 対象カラムの参照元を確認する
2. ALTER TABLEでカラム名を変更する
3. 無効オブジェクトがないか確認する
4. 必要に応じて再コンパイルする
5. アプリケーションの主要処理を確認する

Oracleは大規模な業務システムで使われることも多いため、カラム名変更のような小さく見える変更でも、事前の影響調査が特に重要です。

カラム名と同時に型・NULL・DEFAULTを変更する場合

名前変更と定義変更は分けて考える

カラム名変更と同時に、データ型、NULL可否、DEFAULT値も変更したいケースがあります。

たとえば、次のような変更です。

・fullnameをfull_nameに変更する
・VARCHAR(50)をVARCHAR(100)に広げる
・NULL許可をNOT NULLに変更する
・DEFAULT値を追加する

このような変更は可能ですが、カラム名変更と定義変更を同時に行うと、問題が起きたときに原因を切り分けにくくなります。

たとえば、リリース後にエラーが出た場合、原因が次のどれなのか分かりにくくなります。

・カラム名変更にアプリ側が追従していない
・型変更によってデータ変換に失敗している
・NOT NULL制約に既存データが違反している
・DEFAULT変更によってINSERT時の挙動が変わった

そのため、実務ではできるだけ次のように分けるのがおすすめです。

第1段階:カラム名だけ変更する
第2段階:型やNULL制約、DEFAULT値を変更する

ただし、MySQLのCHANGEのように構文上カラム定義の指定が必要な場合は、名前以外の定義を現行と同じにしておくことが重要です。

NULL制約を変更する前に確認すること

NULL許可のカラムをNOT NULLに変更する場合、既存データにNULLが含まれていると失敗します。

事前に次のようなSQLで確認しましょう。

SELECT COUNT(*) AS null_count
FROM users
WHERE full_name IS NULL;

NULLが存在する場合は、先にデータ補正が必要です。

UPDATE users
SET full_name = ''
WHERE full_name IS NULL;

ただし、空文字で埋めることが業務上正しいとは限りません。

ユーザー名、商品名、メールアドレス、日付など、カラムの意味によって補正方法は変わります。

データ補正は、システム都合ではなく業務ルールに合わせて決める必要があります。

型変更を伴う場合の確認ポイント

カラム名変更と同時に型を変更する場合は、既存データが新しい型に収まるか確認します。

たとえば、VARCHAR(100)からVARCHAR(50)に短くする場合は、50文字を超えるデータがないか確認します。

SELECT COUNT(*) AS over_count
FROM users
WHERE CHAR_LENGTH(full_name) > 50;

数値型へ変更する場合は、数値に変換できない値がないか確認します。

日付型へ変更する場合は、不正な日付文字列がないか確認します。

型変更はデータ破損や変換エラーにつながるため、カラム名変更よりも慎重に扱うべきです。

カラム名変更でよくあるエラーと原因

「列が存在しない」エラー

カラム名変更後によく発生するのが、「列が存在しない」というエラーです。

原因は、アプリケーションやSQL内に旧カラム名が残っていることです。

たとえば、DBではfullnamefull_nameに変更したのに、アプリ側が次のSQLを実行しているケースです。

SELECT fullname FROM users;

この場合、正しくは次のように修正する必要があります。

SELECT full_name FROM users;

単純なSELECTだけでなく、次の箇所も見落としやすいです。

・WHERE句
・ORDER BY句
・GROUP BY句
・JOIN条件
・INSERT文
・UPDATE文
・CSV出力
・検索条件
・管理画面の一覧表示

カラム名変更後は、対象カラムを使うすべての画面・API・バッチを確認しましょう。

ビューやストアドプロシージャが壊れる

ビューやストアドプロシージャが旧カラム名を参照している場合、変更後にエラーになることがあります。

たとえば、次のようなビューがあるとします。

CREATE VIEW user_view AS
SELECT id, fullname
FROM users;

カラム名をfull_nameに変更した後は、ビューも修正する必要があります。

CREATE OR REPLACE VIEW user_view AS
SELECT id, full_name
FROM users;

DBによっては、カラム名変更時に一部の依存関係を自動で扱う場合もありますが、アプリケーションやビュー、ストアドプログラムまで常に完全追従するとは限りません。

そのため、事前に依存関係を確認し、変更後に再作成・再コンパイル・動作確認を行うことが重要です。

インデックス名や制約名が古いまま残る

カラム名を変更しても、インデックス名や制約名が自動で変わらないことがあります。

たとえば、fullnameに対するインデックス名が次のようになっていたとします。

idx_users_fullname

カラム名をfull_nameに変更しても、インデックス名がidx_users_fullnameのまま残る場合があります。

機能的には問題ないこともありますが、命名規約を重視する現場では、実態と名前がずれることで保守性が下がります。

このような場合は、カラム名変更と合わせて、関連するインデックス名や制約名を変更するか検討しましょう。

ただし、インデックスの再作成が必要になる場合は、ロック時間や処理時間にも注意が必要です。

実務で安全にカラム名を変更する手順

1. 変更理由を明確にする

まず、なぜカラム名を変更するのかを明確にします。

よくある理由は次のとおりです。

・命名規則を統一したい
・意味が分かりにくいカラム名を修正したい
・要件変更により名前が実態と合わなくなった
・略語をなくして可読性を上げたい
・他システム連携の項目名と合わせたい

カラム名変更は影響範囲が広いため、「なんとなく分かりやすくしたい」だけで実施するとリスクが見合わないことがあります。

変更理由をチケットや設計書に明記し、関係者が納得できる状態にしておきましょう。

2. 影響範囲を洗い出す

次に、旧カラム名を参照している箇所を洗い出します。

確認対象はDB内だけではありません。

DB側:
・テーブル
・ビュー
・ストアドプロシージャ
・関数
・トリガー
・インデックス
・制約
アプリ側:
・SQL
・ORM
・モデル
・フォーム
・API
・バリデーション
・テストコード
運用側:
・バッチ
・帳票
・CSV出力
・BIツール
・監視クエリ
・仕様書

影響範囲を一覧化したら、変更対象、確認対象、対応不要のものに分類します。

3. 変更SQLと切り戻しSQLを作る

次に、実行するSQLを作成します。

PostgreSQLやOracleなら次のようになります。

ALTER TABLE users RENAME COLUMN fullname TO full_name;

切り戻しSQLも同時に用意します。

ALTER TABLE users RENAME COLUMN full_name TO fullname;

MySQLでCHANGEを使う場合は、現行定義を確認したうえで作成します。

ALTER TABLE users CHANGE fullname full_name VARCHAR(100) NOT NULL;

SQL Serverでは次のようになります。

EXEC sp_rename 'dbo.Users.fullname', 'full_name', 'COLUMN';

切り戻しも同じ考え方です。

EXEC sp_rename 'dbo.Users.full_name', 'fullname', 'COLUMN';

4. 開発環境・ステージング環境で検証する

本番実行前に、開発環境やステージング環境で必ず検証します。

確認すべき内容は次のとおりです。

・DDLが正常に実行できるか
・実行時間はどの程度か
・対象カラムの定義が意図通りか
・ビューやストアドが正常に動くか
・アプリケーションの主要画面が正常に動くか
・APIが正常レスポンスを返すか
・バッチ処理が正常終了するか
・ログにエラーが出ていないか

特に、アプリケーション側のテストは重要です。

DB変更が成功しても、アプリ側が旧カラム名を使っていれば障害になります。

5. 本番作業の手順を作る

本番環境で実行する前に、作業手順を明文化します。

たとえば、次のような手順です。

1. 作業開始を関係者へ連絡
2. 対象バッチを停止
3. 必要に応じてアプリケーションをメンテナンスモードにする
4. バックアップ取得を確認
5. カラム名変更SQLを実行
6. ビュー・ストアド・アプリ側の変更を反映
7. 主要機能の疎通確認
8. エラーログを確認
9. バッチを再開
10. 作業完了を連絡

作業手順には、失敗時の切り戻し判断基準も入れておきましょう。

「どのエラーが出たら戻すのか」「何分以内に復旧しなければ戻すのか」を決めておくと、本番作業中の判断がぶれません。

カラム名変更時のチェックリスト

最後に、実務で使えるチェックリストを整理します。

実行前チェック

□ 対象DBの種類とバージョンを確認した
□ 対象テーブルと対象カラムを確認した
□ 旧カラム名の参照箇所を検索した
□ ビュー・ストアド・関数・トリガーを確認した
□ アプリケーションコードを確認した
□ バッチ・帳票・BIツールを確認した
□ インデックス名・制約名の扱いを決めた
□ 変更SQLを作成した
□ 切り戻しSQLを作成した
□ バックアップ方針を確認した
□ ステージング環境で検証した
□ 本番作業時間を決めた

実行後チェック

□ カラム名が変更されている
□ カラム定義が意図せず変わっていない
□ 主要画面が正常に表示される
□ 登録・更新・削除処理が正常に動く
□ APIが正常に動く
□ バッチが正常に動く
□ ビューやストアドが正常に動く
□ エラーログに異常がない
□ 監視アラートが出ていない
□ 関係者へ作業完了を連絡した

このチェックリストを使うことで、単なるSQL実行ではなく、変更作業として安全に管理できます。

まとめ|SQLのカラム名変更は「構文」より「影響範囲の確認」が重要

SQLでカラム名を変更するには、主にALTER TABLEを使います。

PostgreSQLやOracleでは、次のようにRENAME COLUMNを使います。

ALTER TABLE users RENAME COLUMN fullname TO full_name;

MySQLでも環境によってRENAME COLUMNが使えますが、従来のCHANGEを使う場合は、データ型やNULL可否、DEFAULTなどの定義を正確に指定する必要があります。

ALTER TABLE users CHANGE fullname full_name VARCHAR(100) NOT NULL;

SQL Serverでは、sp_renameを使う方法が一般的です。

EXEC sp_rename 'dbo.Users.fullname', 'full_name', 'COLUMN';

ただし、実務で本当に重要なのは、構文を覚えることだけではありません。

カラム名変更では、ビュー、ストアドプロシージャ、関数、トリガー、アプリケーションコード、バッチ、帳票、BIツールなど、周辺システムへの影響確認が欠かせません。

特に、古いカラム名がどこかに残っていると、変更後に「列が存在しない」というエラーが発生し、画面表示やAPI、バッチ処理に影響する可能性があります。

そのため、カラム名変更を行う際は、次の流れで進めるのが安全です。

1. 対象DBの構文を確認する
2. 旧カラム名の参照箇所を洗い出す
3. 変更SQLと切り戻しSQLを用意する
4. ステージング環境で検証する
5. 本番作業手順を作成する
6. 実行後にアプリ・バッチ・ログを確認する

SQLのカラム名変更は、データベース設計やアプリケーション保守の基本でありながら、実務ではトラブルにつながりやすい作業でもあります。

だからこそ、構文だけでなく、依存関係、ロック、定義変更、切り戻しまで含めて理解しておくことが大切です。

データベース設計やSQLの知識を深め、実務で安全にシステムを改善していく力は、エンジニアとして大きな強みになります。こうした技術課題に向き合いながら、より良いシステムづくりに関わりたい方は、データベースやバックエンド開発に強いチームで経験を積むことも一つの選択肢です。私たちも、技術への関心を持ち、現場の改善に前向きに取り組める仲間を探しています。

学んだSQLを、実務で使えるスキルにしたい方へ

本記事ではSQLの基本的な考え方や使い方を解説しましたが、
「実務で使えるレベルまで身につけたい」と感じた方も多いのではないでしょうか。

SQLは、文法を理解するだけでなく、

  • どんなデータ構造で使われるのか
  • どんなクエリが現場で求められるのか

を意識して学ぶことで、実践力が大きく変わります。

そうした「実務を見据えたSQL学習」を進めたい方には、
完全無料で学べるプログラミングスクール ZeroCode PLUS という選択肢もあります。

  • SQLを含むWeb・データベース系スキルを体系的に学べる
  • 未経験者でも実務を意識したカリキュラム
  • 受講料・教材費がかからない完全無料の学習環境
  • 完全オンラインでスキマ学習


ZeroCode PLUSについて詳しく見る

※学習内容や進め方を確認するだけでもOKです

Join us! 未経験からエンジニアに挑戦できる環境で自分の可能性を信じてみよう 採用ページを見る→

記事監修

ドライブライン編集部

[ この記事をシェアする ]

記事一覧へ戻る