【PostgreSQL】ポケモンずかんをつくってSQLを学ぶ2（データの登録・変更）

##はじめに
この記事はPostgreSQLの勉強のアウトプットにポケモンずかんをつくりながら学びを深める試みです。pgAdminで作業をしているためご了承ください。
また登録されるポケモンの順序などは実際のポケモン図鑑の順番とは違いがありますので宜しくおねがいします。

####過去の記事
現在までの操作を記事化してたら謎にシリーズ化し始めてます。

- [【PostgreSQL】ポケモンずかんをつくってSQLを学ぶ1（テーブルを作成）](https://qiita.com/takahirocook/items/2f5cba7db434280c5702)
- → 現在の記事はここです
- [【PostgreSQL】ポケモンずかんをつくってSQLを学ぶ3（データを取り出す）](https://qiita.com/takahirocook/items/89aba8585dcd42dd310f)

筆者はポケモン第２世代までしかわからないですし、SQL初学者のため謎の動きもするかとおもいますが、それも生々しく残しながら楽しく学習していきます。
前回はテーブルの作成をしたので、データの落とし込みをしていきます。
##INSERT文
INSERT文は、データベース内にデータを新規登録するための文で、INSERT文を使用することによって、テーブルにデータを持たせることができるようになります。
###INSERT文の書き方

テーブルにデータを登録するための書き方は以下です。
1. **`INSERT INTO`** を宣言し、対象のテーブル名を記述します。
2. カラム名を () 内に列挙します。最後以外のカラム名はカンマで区切ります。
3. **`VALUES`**を宣言しカラム名に対応する値を順に、テーブル定義に合わせて () 内に列挙します。


```
INSERT INTO "テーブル名" 
(カラム名1, カラム名2,  ・・・ )
VALUES
(カラム名1の値, カラム名2の値,  ・・・ )
```
このようにして登録していきます。

####フシギダネを登録する
最初のポケモン、フシギダネを登録していきましょう。フシギダネの能力はこんな感じです。

- ナンバー 1
- なまえは フシギダネ
- ぶんるいは たねポケモン
- タイプ1は くさ
- タイプ2は どく
- たかさは 0.7m
- おもさは 6.9kg
- 説明文は うまれたときから せなかに　しょくぶつの　タネがあって　すこしずつ　おおきく　そだつ

####INSERT/UPDATE時に現在時刻のTIMESTAMPを入れたいとき
ポケモンデータには関係ありませんが、更新日時をリアルタイムで投稿したいときに、手打ちは面倒かと思います。
その場合値を**`current_timestamp`**と入力することによって、実行された時間で登録されます。


####INSERT文に値を入力する。

INSERT文にフシギダネのデータを登録して実行してみましょう。

```sql
INSERT INTO pokemon(
  number, name, category, type1, type2, height, weight, description,created
) VALUES
('1','フシギダネ','たねポケモン','くさ','どく','0.7','6.9','うまれたときから せなかに　しょくぶつの　タネがあって　すこしずつ　おおきく　そだつ',current_timestamp);

```
実行に成功したらselect文で確認してみましょう。

```sql
select * from pokemon;
```
無事に入力した値が表示されていればOKです。

####他のデータも登録する

一度に複数のデータも登録できます。ゼニガメ、ヒトカゲ、ピカチュウも登録してみましょう。

```sql
INSERT INTO pokemon(
  number, name, category, type1, type2, height, weight, description,created
) VALUES
('2','ヒトカゲ','とかげポケモン','ほのお','','0.6','8.5','あついものを このむ せいかく。 あめにぬれると しっぽの さきから けむりが でるという。',current_timestamp),
('3','ゼニガメ','かめのこポケモン','みず','','0.5','9.0','ながい くびを こうらのなかに ひっこめるとき いきおいよく みずでっぽうを はっしゃする。',current_timestamp),
('4','ピカチュウ','ねずみポケモン','でんき','','0.4','6.0','つくる でんきが きょうりょくな ピカチュウほど ほっぺの ふくろは やわらかく よく のびるぞ。',current_timestamp);
```
多分ここでエラーが出るかと思います。

```sql
value too long for type character varying(7)
```
これは**文字数制限を７に設定したにもかかわらず、超えてしまった**という意味ですね。
対象となるのは**`category`**かとおもいます。ゼニガメの**「かめのこポケモン」と８文字になってしまった**せいですね。

文字数を調整するのも手ですが、今回は**文字数制限のルールを変えてみます。**

###【ALTER TABLE】テーブルの構造を変更する
作成済みのテーブルを変更するには**`ALTER TABLE コマンド`**というものを用います。
**`ALTER TABLE コマンド`**をつかうことで、以下のようなことが可能です。

- テーブル名を変更
- カラム名を変更
- スキーマを変更
- カラムの追加
- カラムの削除
- カラムのデータ型の変更
- 制約の追加と削除

####ALTER TABLEコマンドの内容と記述方法

| 変更内容                             | 記述                                                              | 
| ------------------------------------ | ----------------------------------------------------------------- | 
| テーブル名を変更する                 | alter table テーブル名 rename to 新しいテーブル名;                | 
| 新しくvarchar(255)のカラムを追加する | alter table テーブル名 add 追加したいカラム名 varchar(255);       | 
| テーブル内のカラムを削除する         | alter table テーブル drop 削除したいカラム名;                     | 
| カラムの名前を変更する               | alter table テーブル名 rename 変更したいカラム to 新しいカラム名; | 
| カラムの型を変更する                 | alter table テーブル名 alter カラム名 type 型の定義;              | 
| not null制約の追加                   | alter table テーブル名 alter カラム名 set not null;               | 
| not null制約の削除                   | alter table テーブル名 alter カラム名 drop not null;              | 

####フィールドの型を変更する

今回のように型を変更したい場合はこのようになります。

```sql
ALTER TABLE テーブル名 alter カラム名 type 型の定義;
```
**categoryの文字数制限を7文字→10文字に変更する**にはこのような記述になります。

```sql
ALTER TABLE pokemon alter category type varchar(10);
```
**`select * from pokemon;`**で確認してみると、文字数制限が変わっているかと思います。

もう一度ポケモンのデータを**INSERT**で登録してみます。

```sql
INSERT INTO pokemon(
  number, name, category, type1, type2, height, weight, description,created
) VALUES
('2','ヒトカゲ','とかげポケモン','ほのお','','0.6','8.5','あついものを このむ せいかく。 あめにぬれると しっぽの さきから けむりが でるという。',current_timestamp),
('3','ゼニガメ','かめのこポケモン','みず','','0.5','9.0','ながい くびを こうらのなかに ひっこめるとき いきおいよく みずでっぽうを はっしゃする。',current_timestamp),
('4','ピカチュウ','ねずみポケモン','でんき','','0.4','6.0','つくる でんきが きょうりょくな ピカチュウほど ほっぺの ふくろは やわらかく よく のびるぞ。',current_timestamp);
```
実行が成功したら**`select * from pokemon;`**で確認してみましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613675/bd3f19fa-a714-f648-ae39-dae6e470108f.png)
登録されていればOKです。