PostgreSQLのテーブル操作についてささっと。
今回はhogeDBにcustomerテーブルを作成し、顧客情報を挿入していく。
顧客情報は下記の3人分。
ID | name | age |
---|---|---|
0001 | 山田太郎 | 29 |
0002 | 中村花子 | - |
0003 | 佐藤信之 | 91 |
テーブルの土台作成
まずはhogeDBにcustomerテーブルを作成していく。
;
でそれまでのプログラムが実行されるため、見やすくカラムごとに行分けするのが鉄則。
上の表をテーブルに落とし込むには、以下のコードでOK。
これを1行づつ説明していく
hoge=# CREATE TABLE Customer
hoge-# (id char(4) NOT NULL,
hoge(# name varchar NOT NULL,
hoge(# age INTEGER ,
hoge(# PRIMARY KEY (id));
CREATE TABLE
テーブル作成の宣言(1行目)
まずCREATE TABLE <Table name>
でテーブル作成の宣言をしている
CREATE TABLE Customer
カラムの設定(2~4行目)
今回はカラムがID,name,ageの3つなので、以降はそれぞれについて分かりやすく1行ずつ記述している。
書き方としては<カラム> <型> <制約>,
である。1カラムごとに,
で区切る。
[idカラム]
idはchar型の4文字で固定し、かつ主キーなので空白を防ぐために制約部分にはNOT NULLが入っている。
id char(4) NOT NULL,
[nameカラム]
nameは可変文字長型のvarcharで指定し、空欄は認めてないのでNOT NULL
name varchar NOT NULL,
[ageカラム]
ageはINTEGERにし、制約に関しては何も定めていない(空挿入も可)
age INTEGER ,
Primary Keyの設定(5行目)
リレーショナルデータベースの概念が崩壊してしまうのでしっかりプライマリーキーを指定する。
書き方はPRIMARY KEY (<主キー>)
PRIMARY KEY (id)
以上でテーブルの土台設定が終わった。
テーブルの土台確認
作ったばかりのcustomerテーブルが出来ているかをpsqlの\d
コマンドで確認する
hoge=# \d
List of relations
Schema | Name | Type | Owner
--------+----------+-------+-------------
public | customer | table | sf213471118
(1 row)
テーブルにレコードを挿入する
レコードを挿入する際には2通りの方法がある
列名を指定して挿入する場合
空挿入の部分がある場合や順番の入れ替わりに便利である。
age欄が未記入であるこのレコードは以下のように記述できる。
hoge=# INSERT INTO Customer(id, name)
VALUES('0002','中村花子');
INSERT 0 1
対応していれば順番を入れ替えても大丈夫
hoge=# INSERT INTO Customer(name, id)
VALUES('加藤里子',`8888`);
列名を省略して挿入する場合
全ての値を挿入したいときに便利である。
こちらの方が楽だが、順番に全て代入していかなければならない。
hoge=# INSERT INTO Customer VALUES('0003','佐藤信之',91);
INSERT 0 1
テーブルの中身を確認する
全ての顧客レコードを挿入したので、SQL文を用いて確認する。
SELECT <column> FROM <table>;
でOK。今回は一覧で見たいのでcolumnは*
とする。
hoge=# SELECT * FROM Customer;
id | name | age
------+----------+-----
0001 | 山田太郎 | 29
0002 | 中村花子 |
0003 | 佐藤信之 | 91
(3 rows)
テーブルのレコードを更新する
下記のようにINSERT
されたレコードを
ID | name | age |
---|---|---|
0002 | 中村花子 | - |
このように変更したい場合は
ID | name | age |
---|---|---|
0002 | 坂井花子 | 49 |
以下のように記述する。
UPDATE <Table name> SET <column> = 'xxxxx' WHERE <Primary Key> ='vvvv';
まず 中村花子
>> 坂井花子
にする。
hoge=# UPDATE Staff SET name = '坂井花子' WHERE id ='0002';
UPDATE 1
これで更新された。同じくage
をNULLから49にしてみる
hoge=# UPDATE Staff SET age = 49 WHERE id ='0002';
UPDATE 1
この一連の流れでできたテーブルを一応確認する
hoge=# SELECT * FROM Customer;
id | name | age
------+----------+-----
0001 | 山田太郎 | 29
0003 | 佐藤信之 | 91
0002 | 坂井花子 | 49
以上で完成した。
[注意点]
UPDATE
を使う際にはWHERE <Primary Key> = 'vvvv'
で指定しないとカラム内の全てが変更されてしまう。
試行例:
hoge=# UPDATE Staff SET age = 49;
試行結果:
hoge=# SELECT * FROM Customer;
id | name | age
------+----------+-----
0001 | 山田太郎 | 49
0003 | 佐藤信之 | 49
0002 | 坂井花子 | 49
全レコードのカラムを全て同じ値にするのには便利そうだが使わなさそう
データを削除する
削除には指定したレコードを消すのと、全行を削除する2通りがある。
データ削除にはDELETE
コマンドを使用する。
DELETE FROM <Table name> WHERE <Primary Key> = 'vvvv';
実際に下記のレコードを削除する
ID | name | age |
---|---|---|
0003 | 佐藤信之 | 91 |
hoge=# DELETE FROM Customer WHERE id='0003';
DELETE 1
hoge=# SELECT * FROM Customer;
id | name | age
------+----------+-----
0001 | 山田太郎 | 29
0002 | 坂井花子 | 49
(2 rows)
しっかり削除されたことが確認できた。
[注意点]
UPDATE
と同じく、DELETE
を使う際にはWHERE <Primary Key> = 'vvvv'
で指定しないとレコードが全て削除されてしまう(空のテーブルができる)
テーブルを削除する
テーブル自体を削除する場合はDROP TABLE
コマンドを使用する。
DROP TABLE <Table name>;
実際にこのCustomerテーブルを削除してみる。現段階でテーブルは以下の通り。
hoge=# \d
List of relations
Schema | Name | Type | Owner
--------+----------+-------+-------------
public | customer | table | sf213471118
(1 row)
この状態でテーブルを削除する。
hoge=# DROP TABLE Customer;
DROP TABLE
\d
で削除されているか確認してみる
hoge=# \d
Did not find any relations.
しっかり削除されていることが確認できた