| この記事の要点 |
|
カラム定義変更とは
既存テーブルのカラムのデータ型 / 桁数 / 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アノテーションとは
最近更新/作成されたページ
- MariaDB Monitor (mysql コマンド) の使い方 2026-10-14 15:21:02
- MariaDB の管理ツール (phpMyAdmin / DBeaver 等) 2026-10-14 15:21:02
- Google Custom Search JSON API|新規受付終了・移行期限と既存実装の確認 2026-10-14 14:50:13
- MySQL rootの初期パスワード確認|導入方式・Docker既存DB・復旧の注意 2026-10-14 14:39:34
- MySQL root パスワードの変更方法(ALTER USER / mysqladmin / パスワード忘れ時の復旧) 2026-10-14 14:39:34
- MySQL ALTER USER の使い方|パスワード変更・アカウントロック 2026-10-14 14:39:34
- MySQL ERROR 1129|ホスト遮断の原因・カウンタ・解除前の確認 2026-10-14 14:04:49
- MySQL ERROR 1820・1862|期限切れパスワードの安全な更新と確認 2026-10-14 14:04:49
- MySQL ERROR 1698|ソケット認証・OSユーザー・接続経路の確認 2026-10-14 14:04:49
- mysql_configが見つからない|mysqlclientの旧ビルドとpkg-configの確認 2026-10-14 13:36:32
- MySQLエラー一覧|番号・SQLSTATE別の原因と安全な確認手順 2026-10-14 13:36:32
- インストール直後にNetbeansが反応しない 2026-10-14 13:07:02
- NetBeans でよくあるエラー一覧と対処法 — JDK / Tomcat / PHP / メモリ不足 2026-10-14 13:07:02
- Apache NetBeans入門|起動JDK・プロジェクト作成・関連手順 2026-10-14 13:07:02
- 【Laravel】ページング(ページネーション)をする方法 2026-10-14 12:31:44