SQL│ALTER TABLEで列を追加・削除する(ADD・DROP)

今回は、RDBMS上に作成したテーブルに対して、列を追加・削除するSQL文について説明します。

RDBMSを運営していく中では、一度、テーブルを作成したあとでも、必要な情報が増え列の追加が必要になったり、逆に不要な情報として列を削除するといったことが発生することもあります。

この記事で紹介するSQL文[ALTER TABLE]を使えば、既存のテーブルに対して列の追加や削除を実行することができます。

目次

SQL_テーブルに列を追加する(ALTER TABLE ADD)

この章では、ALTER TABLE ADDを使って、RDBMS上のテーブルに列を追加する方法を説明します。なお、見本は便宜上、Excel形式の表を使います。

既存のテーブルに列を追加する

基本文法_ALTER TABLE ADD

RDBMS上に作成したテーブルに列を追加するときには、[ALTER TABLE ADD]というSQL文を実行します。

基本文法

–テーブルに1列を追加する
ALTER TABLE テーブル名 ADD COLUMN 列名 データ型;

–テーブルに2列を追加する
ALTER TABLE テーブル名 ADD COLUMN 列名1 データ型,
ADD COLUMN 列名2 データ型;

追加列の位置

基本文法の場合、追加する列は既存テーブルの最終列になります。

最終列に追加される

列の位置を指定して追加する(MySQLのみ)

ALTER TABLEを使って列を追加する際、最後尾ではなく任意の箇所に列を追加する方法です。

ただし、PostgreSQLでは任意の箇所に列を追加することはできません。

–テーブルの最初に追加する
ALTER TABLE テーブル名 ADD COLUMN 列名 データ型 FIRST;

テーブルの最初に列が追加される

–指定列の次に追加する
ALTER TABLE テーブル名 ADD COLUMN 列名 データ型 AFTER 指定列名;

指定した列の次に列が追加される

実際のALTER TABLE ADD文

  • テーブル名・・・・Worker
  • 追加列名・・・boss

たとえば、RDBMS上に作成されているテーブル「Worker」に、「boss」という列を追加するときには下記のようにSQL文を記述します。

SQL[ALTER TABLE ADD文]

ALTER TABLE Worker ADD COLUMN boss VARCHAR(30);

NOT NULL制約について

ALTER TABLEで列を追加する際、追加する列にNOT NULL制約を定義したい場合には注意が必要です。

SQLの文法上では、下記のようにNOT NULL制約を付加することも可能ですが、既存のテーブルにすでにデータが登録されている場合、追加した列のレコードが空白となってしまい、エラーが発生します。

ALTER TABLE Worker ADD COLUMN boss VARCHAR(30) NOT NULL;
整合性エラー(新規列の既存レコードが空欄になるため)

そのため、手順としては

  1. ALTER TABLEで列を追加。(NOT NULL制約は記述しない)
  2. 追加した列にデータを登録。(その列に空欄がない状態)
  3. 2の列にALTER TABLE ~ SETでNOT NULL制約を定義。

という順番でNOT NULL制約を定義する必要があるのです。

列の定義の変更について

ALTER TABLEは、既存の列の定義を変更することも可能です。たとえばデータ型を変更したり、NOT NULL制約を定義したりといったことが可能です。そのような使い方については、別記事で紹介します。

SQL_テーブルの列を削除する(ALTER TABLE DROP)

この章では、ALTER TABLE DROPを使って、RDBMS上のテーブルの列を削除する方法を説明します。なお、見本は便宜上、Excel形式の表を使います。

既存のテーブルの列を削除する

基本文法_ALTER TABLE DROP

RDBMS上に作成したテーブルの列を削除するときには、[ALTER TABLE DROP]というSQL文を実行します。

基本文法

–テーブルの1列を削除する
ALTER TABLE テーブル名 DROP COLUMN 列名;

–テーブルの2列を削除する
ALTER TABLE テーブル名 DROP COLUMN 列名1,
DROP COLUMN 列名2;

実際のALTER TABLE DROP文

  • テーブル名・・・・Worker
  • 削除列名・・・boss

たとえば、RDBMS上に作成されているテーブル「Worker」の、「boss」という列を削除するときには下記のようにSQL文を記述します。

SQL[ALTER TABLE DROP文]

ALTER TABLE Worker DROP COLUMN boss;

実例_MySQLの[ALTER TABLE ADD/DROP]

実際のRDBMS、MySQLでALTER TABLE文を実行してテーブルに列を追加・削除した実画像を紹介します。

列を追加_ALTER TABLE ADD

ALTER TABLE worker ADD COLUMN boss VARCHAR(30);

列を削除_ALTER TABLE DROP

ALTER TABLE worker DROP COLUMN boss;

実例_PostgreSQLの[ALTER TABLE ADD/DROP]

実際のRDBMS、PostgreSQLでALTER TABLE文を実行してテーブルに列を追加・削除した実画像を紹介します。

列を追加_ALTER TABLE ADD

ALTER TABLE worker ADD COLUMN boss VARCHAR(30);

列を削除_ALTER TABLE DROP

ALTER TABLE worker DROP COLUMN boss;

あとがき

今回は、ALTER TABLE文で既存のテーブルに列を追加したり、列を削除する方法について記事にしました。

ALTER TABLEでは、今回のように列の追加と削除のほか、定義を変更したり、テーブル・列名のリネームをすることも可能です。それらの使い方については、別記事で紹介します。

目次