| この記事の要点 |
|
カラム定義変更とは
既存テーブルのカラムのデータ型 / 桁数 / 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 新; |
関連記事
子ページ
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- djangoのテンプレートの作成とヘッダー・フッターの共通化 2026-10-03 21:41:49
- テンプレートフラグメント(ヘッダー等の共有化) 2026-10-03 21:41:49
- reCAPTCHA v3 使い方(サンプル付き) 2026-10-03 21:37:05
- Content-Type一覧|MIMEタイプとはとHTTPでの主な使用場面 2026-10-03 21:37:05
- SpringにおけるAOPの使い方 2026-10-03 21:37:05
- X (Twitter) API でツイートできないがエラーが出ない問題の原因と対処 2026-10-03 11:33:01
- X (Twitter) API アプリケーション登録完全ガイド|v2・Bearer Token・OAuth 2.0 PKCE 2026-10-03 11:33:01
- X (Twitter) API 完全ガイド|従量課金の料金・単価(2026年10月)と v2 移行 2026-10-03 11:32:40
- Google DeepMind とは?Gemini・AlphaFold の開発元 2026-10-03 11:26:56
- Cursor とは?AI 統合型コードエディタの使い方・料金 2026-10-03 11:26:56
- Claude (Anthropic) とは?AIチャットの使い方・モデルファミリ・API 2026-10-03 11:26:56
- AIベンダー一覧:OpenAI・Anthropic・Google DeepMind・Microsoft・Meta 2026-10-03 11:26:56
- クラウド・インフラ完全ガイド — AWS/Azure/GCP/Kubernetes 2026-10-03 11:26:56
- テキストエディタ完全比較 (VS Code / Cursor / Vim / Emacs / IDE) 2026-10-03 11:26:56
- プログラミング学習プラットフォーム|Scratch・micro:bit ほか 2026-10-03 11:26:56