ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
ALTER TABLE ADD とは
既存のテーブルに新しいカラム(列)を追加する SQL 文です。テーブルを再作成しなくてもスキーマを拡張できるため、運用中のデータベースで頻繁に使われます。
基本構文
-- 標準構文
ALTER TABLE テーブル名
ADD カラム名 データ型 [制約];
-- PostgreSQL / MySQL は COLUMN キーワード可(省略可)
ALTER TABLE テーブル名
ADD COLUMN カラム名 データ型 [制約];
もっともシンプルな例
ALTER TABLE test_table
ADD new_col VARCHAR(20) NOT NULL;
ただし既存行が 1 行でもあると、デフォルト値の指定がないとエラーになる DB が多いです(NOT NULL 制約に既存行が違反するため)。
DEFAULT 値付きで追加(推奨)
ALTER TABLE test_table
ADD status VARCHAR(20) DEFAULT 'active' NOT NULL;
-- 数値型
ALTER TABLE orders
ADD discount NUMERIC(5,2) DEFAULT 0 NOT NULL;
-- 日付型(追加時の現在時刻で埋める)
ALTER TABLE users
ADD created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL;
複数カラムを一度に追加
DB によって書き方が異なります。
-- Oracle / MySQL(括弧でまとめる)
ALTER TABLE test_table
ADD (
col1 VARCHAR(20),
col2 INT DEFAULT 0
);
-- PostgreSQL(カンマで連続)
ALTER TABLE test_table
ADD COLUMN col1 VARCHAR(20),
ADD COLUMN col2 INT DEFAULT 0;
-- SQL Server
ALTER TABLE test_table
ADD col1 VARCHAR(20),
col2 INT DEFAULT 0;
各 DB のクセ早見表
| DB | キーワード | 位置指定 | 備考 |
|---|---|---|---|
| Oracle | ADD(複数は括弧) | 不可 | 末尾に追加のみ |
| MySQL | ADD [COLUMN] | FIRST / AFTER 可 | 位置指定が可能(古い DB の特徴) |
| PostgreSQL | ADD COLUMN(複数 OK) | 不可 | 11 以降、デフォルト付きは高速化 |
| SQL Server | ADD(カンマで複数) | 不可 | NOT NULL は DEFAULT 必須または既存行ゼロ |
| SQLite | ADD COLUMN | 不可 | 制約に制限あり(PRIMARY KEY 不可など) |
MySQL の位置指定
-- 既存の id カラムの直後に追加
ALTER TABLE users
ADD COLUMN nickname VARCHAR(50) AFTER id;
-- 先頭に追加
ALTER TABLE users
ADD COLUMN serial_no INT FIRST;
計算列(生成列)を追加する
他のカラムの値から自動計算される列も追加できます。
-- PostgreSQL
ALTER TABLE orders
ADD COLUMN total_with_tax NUMERIC(10,2)
GENERATED ALWAYS AS (price * 1.1) STORED;
-- MySQL 5.7+
ALTER TABLE orders
ADD COLUMN total_with_tax NUMERIC(10,2)
AS (price * 1.1) VIRTUAL;
-- SQL Server
ALTER TABLE orders
ADD total_with_tax AS (price * 1.10) PERSISTED;
大規模テーブルでの注意
- テーブル全体のロックが発生する DB がある(MySQL の InnoDB は条件次第でオンライン DDL 可)
- NOT NULL + DEFAULT 値は全行を書き換えるのと等価になりがちで時間がかかる
- PostgreSQL 11 以降は定数 DEFAULT のメタデータのみ書換で高速
- 業務時間外のメンテナンスウィンドウで実施するのが安全
- 大規模 MySQL では pt-online-schema-change や gh-ost のオンライン DDL ツールを検討
追加後の確認
-- カラム一覧
-- Oracle
DESC test_table;
SELECT column_name, data_type, nullable
FROM user_tab_columns WHERE table_name = 'TEST_TABLE';
-- PostgreSQL
\d test_table
-- MySQL
SHOW COLUMNS FROM test_table;
DESCRIBE test_table;
-- SQL Server
EXEC sp_columns 'test_table';
NULL 許可 / NOT NULL の選び方
新規カラムの NULL 許可は後から変えるのが面倒なため、追加時に慎重に決めます。判断基準は次のとおりです。
- 業務上「未設定」が意味を持つ → NULL 許可
- 論理的に必ず値があるべき → NOT NULL + DEFAULT で追加し、後から DEFAULT を外す手もある
- 新規挿入時にアプリ側で必ず値を入れる前提なら、まず NULL 許可で追加 → 既存行を埋める UPDATE → NOT NULL 化、の段階的マイグレーションが安全
段階的マイグレーションの定番手順
本番運用中のテーブルで NOT NULL カラムを追加する際は、以下のステップで進めるとダウンタイムを最小化できます。
- NULL 許可で新カラムを追加(最小限のロック)
- アプリ側を新カラムも書き込むようデプロイ
- 既存行を
UPDATEで埋める(バッチで分割) - NOT NULL 制約を追加
- 不要になれば旧カラムを後日 DROP
-- 1. 追加
ALTER TABLE users ADD COLUMN status VARCHAR(20);
-- 2. (アプリデプロイ後)3. 既存行を埋める
UPDATE users SET status = 'active' WHERE status IS NULL;
-- 4. NOT NULL 化
ALTER TABLE users ALTER COLUMN status SET NOT NULL; -- PostgreSQL
ALTER TABLE users MODIFY status VARCHAR(20) NOT NULL; -- MySQL
関連
- ALTER TABLE — テーブル変更全般
- カラムの削除(DROP COLUMN)
- カラムのデータ型変更(MODIFY / ALTER COLUMN)
- カラム名変更(RENAME COLUMN)
- CREATE TABLE — テーブル新規作成
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページ
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- IPv6とは|128bitアドレス・コロン16進表記/::省略・リンクローカル・SLAAC・デュアルスタック NEW 2026-06-22 12:34:44
- VPNとは|暗号トンネル・サイト間/リモートアクセス・IPsec/SSL-VPN/WireGuardを解説 NEW 2026-06-22 12:19:10
- MAC アドレスフィルタリングの仕組みと限界 | ネットワーク入門 NEW 2026-06-22 12:19:10
- gRPC とは HTTP/2 + Protocol Buffers の高速 RPC | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/3 (QUIC) とは UDP ベースの低遅延 Web 通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebSocket とは 全二重リアルタイム通信 ws/wss | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebRTC とは ブラウザ間 P2P の音声・映像・データ通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/2 とは 多重化・HPACK・バイナリフレーム | ネットワーク入門 NEW 2026-06-22 12:17:25
- Web通信プロトコル入門 HTTP/2・HTTP/3・WebSocket・gRPC・WebRTC | ネットワーク入門 NEW 2026-06-22 12:17:25
- 証明書と認証局(CA)とは|X.509・信頼チェーン・DV/OV/EV・失効(CRL/OCSP)を解説 NEW 2026-06-22 12:17:24
- HAProxy とは frontend/backend と設定例 | ネットワーク入門 NEW 2026-06-22 12:17:24
- ファイアウォールとは|パケットフィルタ・ステートフル・DMZ・次世代FW(L4/L7)を解説 NEW 2026-06-22 12:17:24
- CDN とは エッジキャッシュ・TTL・Cloudflare/CloudFront | ネットワーク入門 NEW 2026-06-22 12:17:24
- TLS/SSLの仕組み|ハンドシェイク・暗号スイート・前方秘匿性・証明書検証をわかりやすく解説 NEW 2026-06-22 12:17:24
- iptables/nftablesとは|テーブル・チェーン・ルール例・永続化をLinux視点で解説 NEW 2026-06-22 12:17:24
コメントを削除してもよろしいでしょうか?