PostgreSQLの学習:ALTER TABLE・DROP TABLEでTableを変更・削除する
今回はPostgreSQLで、既存のTableを変更・削除する方法について考えてみたいと思います。
これまで、
-
CREATE TABLEでTableを作成 -
INSERTでRowを追加 -
SELECTでデータを取得
という操作を学習しました。
今回は、すでに存在するTableに対して使用するALTER TABLEとDROP TABLEについて整理します。
特に、
- DB Objectとは何か
- ALTER TABLEとは何か
- DROP TABLEとは何か
- ALTER TABLEとDROP TABLEの違い
- CREATE TABLE・ALTER TABLE・DROP TABLEの違い
について整理します。
所要時間は10分ほどです。
それでは、さっそく始めていきましょう!
DB Objectとは
DB Object(Database Object)とは、Database内で管理される構成要素です。
これまで扱ってきたTableもDB Objectの一例です。
今回の学習では、
Database
└── Schema
└── Table
↑
DB Object
という関係を前提として、Tableの変更と削除を行います。
ALTER TABLEとは
ALTER TABLEとは、既に存在するTableの定義を変更するためのSQLです。
今回は、Table名の変更を実際に行いました。
もともと、
costomers
という名前で作成していたTableを、
customers
へ変更します。
使用したSQLは以下です。
ALTER TABLE costomers
RENAME TO customers;
それぞれ、
ALTER TABLE costomers
→ costomers Tableを変更対象にする
RENAME TO customers
→ Table名をcustomersに変更する
という意味になります。
構造としては、
変更前
public
├── costomers
└── visits
↓ ALTER TABLE
変更後
public
├── customers
└── visits
となります。
ALTER TABLEでTable名を変更すると新しいTableが作られるのか
ここで重要なのは、ALTER TABLE ... RENAME TOを実行しても、新しいTableが追加で作られるわけではないということです。
今回、
ALTER TABLE costomers
RENAME TO customers;
を実行しましたが、
costomers
+
customers
という2つのTableになったわけではありません。
既存の、
costomers
というTableの名前が、
customers
へ変更されています。
そのため、
変更前
Table数 = 2
costomers
visits
↓ ALTER TABLE
変更後
Table数 = 2
customers
visits
となりました。
つまり、
ALTER TABLE
→ 既存Tableの定義を変更する
CREATE TABLE
→ 新しいTableを作る
という違いがあります。
PostgreSQLでALTER TABLEを実行する
まず、psqlの\dtで現在のTableを確認しました。
public | costomers | テーブル
public | visits | テーブル
ここで、
ALTER TABLE costomers
RENAME TO customers;
を実行しました。
PostgreSQLから、
ALTER TABLE
と返されました。
その後、再び、
\dt
を実行すると、
public | customers | テーブル
public | visits | テーブル
となり、
costomers
↓
customers
へTable名が変更されたことを確認できました。
なお、\dtはSQLではなく、psqlのメタコマンドです。
DROP TABLEとは
DROP TABLEとは、既に存在するTableというDB Objectそのものを削除するSQLです。
今回は、
customers
Tableを削除しました。
使用したSQLは、
DROP TABLE customers;
です。
構造としては、
削除前
public
├── customers
└── visits
↓ DROP TABLE
削除後
public
└── visits
となります。
DROP TABLEはRowだけを削除するのか
DROP TABLEについて特に重要なのは、Tableの中にあるRowだけを削除する操作ではないということです。
今回の、
DROP TABLE customers;
は、
× customersのRowだけを削除する
○ customersというTableそのものを削除する
という操作です。
つまり、TableというDB Object自体がなくなります。
PostgreSQLでDROP TABLEを実行する
実際に、
DROP TABLE customers;
を実行しました。
PostgreSQLから、
DROP TABLE
と返されました。
その後、
\dt
で確認すると、
public | visits | テーブル
のみになりました。
つまり、
customers
↓
DROP TABLE
↓
Tableそのものが削除された
ことを確認できました。
ALTER TABLEとDROP TABLEの違い
今回学習した2つを比較すると、
ALTER TABLE
→ 既存Tableの定義を変更する
DROP TABLE
→ 既存Tableそのものを削除する
という違いがあります。
今回の操作では、
costomers
↓
ALTER TABLE ... RENAME TO
↓
customers
↓
DROP TABLE
↓
削除
という流れになりました。
ALTER TABLEを実行した時点ではTableは存在し続けています。
一方、DROP TABLEを実行すると、そのTable自体がなくなります。
CREATE TABLE・ALTER TABLE・DROP TABLEの違い
ここまでに学習したTableに関するSQLを整理します。
| SQL | 役割 |
|---|---|
CREATE TABLE |
新しいTableを作成する |
ALTER TABLE |
既存Tableの定義を変更する |
DROP TABLE |
既存Tableそのものを削除する |
イメージすると、
Tableがない
↓
CREATE TABLE
↓
Tableができる
↓
ALTER TABLE
↓
Tableの定義が変わる
↓
DROP TABLE
↓
Tableがなくなる
という関係になります。
INSERT・SELECTとの違い
これまで学習したSQLも含めると、
CREATE TABLE
→ Tableを作る
ALTER TABLE
→ Tableの定義を変更する
DROP TABLE
→ Tableそのものを削除する
INSERT
→ TableにRowを追加する
SELECT
→ Tableなどからデータを取得する
となります。
特に、
TableというDB Objectそのものを操作しているのか
それとも
Tableに格納されているデータを操作しているのか
を区別すると、それぞれのSQLの役割を理解しやすくなります。
まとめ
今回はPostgreSQLのALTER TABLEとDROP TABLEについて整理しました。
ALTER TABLEは、
ALTER TABLE costomers
RENAME TO customers;
のように、既存Tableの定義を変更できます。
今回の場合は、
costomers
↓
customers
とTable名を変更しました。
一方、DROP TABLEは、
DROP TABLE customers;
のように、TableというDB Objectそのものを削除します。
今回の操作全体を整理すると、
costomers
↓ ALTER TABLE
customers
↓ DROP TABLE
削除
となります。
ここまでの学習によって、
| SQL | 役割 |
|---|---|
CREATE TABLE |
Tableを作る |
ALTER TABLE |
Tableの定義を変更する |
DROP TABLE |
Tableそのものを削除する |
INSERT |
TableにRowを追加する |
SELECT |
データを取得する |
という基本的な役割の違いを整理できました。