DDL – PostgreSQLではじめるDB入門 http://db-study.com DBの基礎から設計の考え方、実践で役立つ知識などを図解を用いてわかりやすく解説しています。さらにPostgreSQLによりサンプルを交えながらSQLを使いこなすために必要な知識をまとめています。 Sun, 04 Feb 2018 05:24:53 +0000 ja hourly 1 https://wordpress.org/?v=4.9.3 テーブルの削除(DROP TABLE) http://db-study.com/archives/257 http://db-study.com/archives/257#respond Sat, 04 Jun 2016 00:31:24 +0000 http://db-study.com/?p=257 前回はDELETEコマンドで行(レコード)を削除しましたが、今回はテーブル自体を削除するDROP TABLEコマンドについて見ていきます。

DROP TABLEコマンド

DROP TABLEコマンドによりテーブルを削除します。構文も単純であり、削除するテーブル名を指定するのみです。

DROP TABLEコマンドの基本構文
DROP TABLE テーブル名;

では、実際にテーブルを削除してみましょう。その前に、データベース内に存在するテーブルを確認しておきます。

testdb=# \d
              リレーションの一覧
 スキーマ |    名前     |    型    |  所有者
----------+-------------+----------+----------
 public   | staff       | テーブル | postgres
 public   | testTable01 | テーブル | postgres
(2 行)

現状は2つのテーブルがあることが確認できます。ではそのうちのStaffテーブルを削除してみましょう。

testdb=# DROP TABLE staff;

DROP TABLEコマンド発行後、正しくテーブルが削除されたかどうか確認してみます。

testdb=# \d
              リレーションの一覧
 スキーマ |    名前     |    型    |  所有者
----------+-------------+----------+----------
 public   | testTable01 | テーブル | postgres
(1 行)

このようにテーブルの削除は非常に簡単です。ただし、「間違えて削除してはいけないテーブルを削除してしまった」とDROP TABLEコマンド発行後に気がついても、もう元には戻せません。

例えば、本番稼働中のシステムのテーブルを誤って削除してしまったといった場合、直後に惨劇が訪れます。データベースはあらゆるシステムの根幹です。DROP TABLEコマンドを使用する場合は十分に注意するよう心がけて下さい。

]]>
http://db-study.com/archives/257/feed 0
テーブルの作成(CREATE TABLE) http://db-study.com/archives/233 http://db-study.com/archives/233#respond Wed, 01 Jun 2016 10:36:45 +0000 http://db-study.com/?p=233 今回からはpsqlを利用して実際にSQLコマンドを発行していきます。

まずは、データの入れ物であるテーブルを作成します。

CREATE TABLEコマンド

テーブルの作成はCREATE TABLEコマンドで行います。

CREATE TABLEコマンドの基本構文
CREATE TABLE テーブル名 (列名 データ型 制約 [, 列名 データ型 制約 …] );
   :
[表制約]
※[]内の数は不定

()内は列名とデータ型、その列の制約で1セットとなり、定義する列の分だけ、カンマ(,)区切りで指定します。列名とデータ型の定義は必須であり、制約は必要に応じて任意に設定します。

列に指定する制約として以下の項目があります。

PRIMARY KEY 主キーとする。
UNIQUE 列内で重複する値を許可しない。
REFERENCES 表名(列名) 外部キーとする。参照先は指定した表名(列名)となる。
CHECK(条件) 条件に合う値のみ登録を許可する。
NOT NULL NULL値(空の値)を許可しない。
DEFAULT 値 新規行追加時の初期値を指定する。

上記は列ごとに制約を指定していますが、以下の制約については表全体の制約として指定することができます。

PRIMARY KEY(列名リスト) 指定した列(複合キーの場合は列1、列2…と列挙)を主キーとする。
UNIQUE(列名リスト) 指定した列内で重複する値を許可しない。
FOREIGN KEY(列名リスト) REFERENCES 表名(列名リスト) 指定した列(複数列を参照する場合は列1、列2…と列挙)を外部キーとする。参照先は指定した表名(列名)となる。

特に複数の列を使って主キーとする複合キーなどは、列ごとに設定することができないため、この表制約にて設定を行うことになります。

ここではサンプルとして以下の列を持つStaffテーブルを作成します。

列名 データ型 制約
id INTEGER PRIMARY KEY
name TEXT NOT NULL
age INTEGER なし

スタッフの名簿情報を格納するテーブルです。列には「id」「name」「age」を持ち、それぞれ、ID、名前、年齢を格納します。データ型はそれぞれ数字、文字列、数字とします。

また、各列の制約として、「id」にはPRIMARY KEY(主キー)制約を持たせます。PRIMARY KEY制約は、列内で重複する値の格納を許可せず、かつ、必ずデータを格納しなければならないという制約です。

「name」には必ずデータを格納しなければならないことを示すNOT NULL制約を持たせます。

では、実際にCREATE TABLEコマンドを発行してテーブルを作成してみましょう。今回発行するSQL文は以下になります。

CREATE TABLE Staff
(id    CHAR(4)    NOT NULL,
name   TEXT       NOT NULL,
age    INTEGER    ,
PRIMARY KEY (id));

まず、PostgreSQLに接続します。本サンプルでは接続先のデータベースとして「testdb」を指定しています。データベースの作成については「サンプルデータベースの作成」を参照してください。

# su - postgres
$ psql -U postgres testdb

「testdb」に接続できたら、上記のCREATE TABLEコマンドを発行し、Staffテーブルを作成します。SQL文は1行で実行しても構いませんが、見やすいよう以下のように複数行に分けて実行します。

testdb=# CREATE TABLE Staff
testdb-# (id    CHAR(4)    NOT NULL,
testdb(# name   TEXT       NOT NULL,
testdb(# age    INTEGER    ,
testdb(# PRIMARY KEY (id));

2行目以降は、プロンプトが「=#」から「-#」や「(#」に変わっていることに着目してください。これは、まだSQLが終わっていないことを示しており、セミコロンを入力し、Enterキーを押すことで、ここまでの入力した内容がひとつのSQL文として見なされ実行されます。

では、テーブルが作成されたかどうかをバックスラッシュコマンドで確認してみましょう。

testdb=# \d
              リレーションの一覧
 スキーマ |    名前     |    型    |  所有者
----------+-------------+----------+----------
 public   | staff       | テーブル | postgres
 public   | testTable01 | テーブル | postgres
(2 行)

Staffテーブルが一覧から確認できます。これでテーブルは作成されました。次回は今回作成したテーブルにデータを挿入するSQLについて見ていきます。

]]>
http://db-study.com/archives/233/feed 0
SQL概要 http://db-study.com/archives/218 http://db-study.com/archives/218#respond Sat, 28 May 2016 09:43:49 +0000 http://db-study.com/?p=218 SQL(Structured Query Language)はデータベースを操作するための言語です。

PostgreSQLを含む、ほとんどのRDBMSがSQLをサポートしており、アプリケーションからデータベースを利用する場合にはSQLを使用してデータベースに対して各種問い合わせを行うことになります。

SQLでできることのほとんどはpgAdminによるGUIからでも操作できますが、アプリケーションからデータベースにアクセスする場合には、GUIで操作というわけにはいきません。

そのため、PostgreSQLに限らず、データベースを利用するアプリケーションを開発する上で、SQLの習得は必須であり、避けては通れないものです。

SQLとは

SQL(Structured Query Language)はデータベース(正確にはリレーショナルデータベース)を操作するために開発された言語です。
もともと、データベースから効率良くデータを検索することを目的としたものでしたが、現在ではデータ検索だけでなく、データの登録や削除といったデータベース操作のほとんどをSQLで行うことができます。

SQLにはISO(国際標準化機構)で定められた標準規格があり、それに準拠したSQLを標準SQLと言います。

このように標準規格を定めることで、さまざまにあるRDBMSで同じSQL文を使うことができます。
ただし、標準SQLに完全に準拠したRDBMSばかりではなく、RDBMSごとにいわゆる「方言」のようなものが存在します。(例えば、Oracleデータベースで使用できるSQL文がSQL Serverでは使用できないなど。)

とは言うものの、標準SQLを覚えれば、大抵のデータベース操作が可能なため、まず、標準SQLでの書き方を覚えていくのが良いでしょう。

SQLの分類

SQLは機能により、大きく次の3つに分類されます。

DDL(Data Definition Language)

DDL(データ定義言語)は、テーブルなどのオブジェクトを作成するためのコマンド群です。DDLに分類されるコマンドは以下になります。

CREATE データベースやテーブルなどを作成する。
DROP データベースやテーブルなどを削除する。
ALTER データベースやテーブルなどの構成を変更する。

DML(Data Manipulation Language)

DML(データ操作言語)は、データの挿入/更新/削除などを行うためのコマンド群です。DMLに分類されるコマンドは以下になります。

SELECT テーブルから行を検索する。
INSERT テーブルに新規行を登録する。
UPDATE テーブルの行を更新する。
DELETE テーブルの行を削除する。

DCL(Data Control Language)

DCL(データ制御言語)は、トランザクション関連のコマンドが含まれます。DCLに分類されるコマンドは以下になります。

COMMIT データベースに対して行った変更を確定する。
ROLLBACK データベースに対して行った変更を取り消す。
GRANT ユーザーに操作の権限を与える。
REVOKE ユーザーから操作の権限を奪う。

このように、SQLは機能により3つの種類に分けられます。そのうち、最もよく使われるのがDML(データ操作言語)になります。

]]>
http://db-study.com/archives/218/feed 0