Webサイト制作コースのお申し込みはこちら Webサイト制作コースのお申し込みはこちら

SQLのカラム追加についてまとめています。

SQLのカラム追加はalter table。データベースエンジンにより一部の仕様が異なる

SQL カラム追加 MySQL

MySQLは、カラム追加関連の機能が他のデータベースエンジンより柔軟に拡張されています。

例えば、1つのalter table文で複数のカラムを一括追加することが可能です。

alter table 
	employees_copy 
add 	dept_no char(4) NOT NULL after emp_no, 
add 	dept_name varchar(40) NOT NULL

【関連記事】
MySQLのカラム追加 サンプルコード集 一括で複数追加する方法は? 

また、MySQLでは、テーブルの任意の位置にカラムを追加することが、ALTER TABLE文のみで可能です。

mysql> show columns from employees_copy;
+------------+---------------+------+-----+---------+-------+
| Field      | Type          | Null | Key | Default | Extra |
+------------+---------------+------+-----+---------+-------+
| emp_no     | int           | NO   | PRI | NULL    |       |
| birth_date | date          | NO   |     | NULL    |       |
| first_name | varchar(14)   | YES  |     | NULL    |       |
| last_name  | varchar(16)   | NO   |     | NULL    |       |
| gender     | enum('M','F') | NO   |     | NULL    |       |
| hire_date  | date          | NO   |     | NULL    |       |
+------------+---------------+------+-----+---------+-------+
6 rows in set (0.00 sec)
alter table 
	employees_copy 
add 
	dept_no char(4)
	NOT NULL
after	emp_no;

mysql> show columns from employees_copy;
+------------+---------------+------+-----+---------+-------+
| Field      | Type          | Null | Key | Default | Extra |
+------------+---------------+------+-----+---------+-------+
| emp_no     | int           | NO   | PRI | NULL    |       |
| dept_no    | char(4)       | NO   |     | NULL    |       |
| birth_date | date          | NO   |     | NULL    |       |
| first_name | varchar(14)   | YES  |     | NULL    |       |
| last_name  | varchar(16)   | NO   |     | NULL    |       |
| gender     | enum('M','F') | NO   |     | NULL    |       |
| hire_date  | date          | NO   |     | NULL    |       |
+------------+---------------+------+-----+---------+-------+
7 rows in set (0.00 sec)

上記の例では、emp_noカラムの後ろにdept_noカラムを追加することができます。なお、カラムの1番目に追加したい場合は、after emp_noの箇所にfirstと指定します。

他のデータベースのカラム追加時の位置指定が軒並み不可。カラムの位置指定はMySQLの独自拡張のようですね。

SQL カラム追加 Oracle

CREATE TABLE t1 (name VARCHAR2(10));
INSERT INTO t1 VALUES('Kevin');
INSERT INTO t1 VALUES('Julia');
INSERT INTO t1 VALUES('Ryan');

ALTER TABLE t1 ADD (id NUMBER DEFAULT ON NULL s1.NEXTVAL NOT NULL);

SELECT id, name FROM t1 ORDER BY id;

        ID NAME
---------- ----------
         1 Kevin
         2 Julia
         3 Ryan

Oracle公式ドキュメント:ALTER TABLE

Oracleでは、任意の位置にカラム列を追加することはできません。テーブル再生成し、データを移し替えるといった手順が必要になります。制約が設定してある場合は、設定も全て移し替えることになり非常にめんどう。

SQL カラム追加 SQL Server

CREATE TABLE dbo.doc_exc (column_a INT) ;
GO
ALTER TABLE dbo.doc_exc ADD column_b VARCHAR(20) NULL
    CONSTRAINT exb_unique UNIQUE ;
GO
EXEC sp_help doc_exc ;
GO
DROP TABLE dbo.doc_exc ;
GO

ALTER TABLE (Transact-SQL) – SQL Server | Microsoft Docs

なお、SQL Serverでは、カラムを任意の位置に追加する方法は用意されていません。テーブル再作成後に、他のテーブルとの依存関係(フォーリンキーなど)を解消後にデータを移すという手順になります。

SQL カラム追加 postgreSQL

ALTER TABLE products ADD COLUMN description text;
ALTER TABLE products ADD COLUMN description text CHECK (description <> '');

PostgreSQL公式:テーブルの変更

postgresSQLは、任意の位置にカラム追加する方法がありません。postgres公式のwikiによると、目的のカラムの並びになるようテーブル全体を再作成してからデータを写し、古いテーブルを削除するという方法が紹介されていました。

関連)Alter column position/ja – PostgreSQL wiki

しかし、他のテーブルからなんらかの依存関係が設定されていた場合を考慮すると簡単にはできないケースもあります。その場合は、データベース全体を再作成することになります。

postgreSQLでは、テーブルへのカラム追加で位置を指定するのはかなり大掛かりになることを覚えておきましょう。

2020年の最新版でも位置指定ができない点を見ると、なんらかのポリシーに従って位置指定不可の仕様になっていると思われます。

まとめ

ポテパンダの一言メモ
  • SQLのカラム追加はalter table
  • MySQLは、複数カラムの一括追加と、カラムの追加位置指定が可能
  • MySQL以外は、追加カラムの位置指定をおこなうためにテーブルの再生成とデータの移行が必要

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。