15.3. Lesson: モデルにデータを追加する
作成したモデルには、今、含まれることを意図されるデータが投入される必要があります。
このレッスンの目標: データベースモデルに新しいデータを挿入する方法を学習します。
15.3.1. insert文
どのようにテーブルにデータを追加しますか?SQLの INSERT 文は、このための機能を提供します:
insert into streets (name) values ('High street');
注意すべきいくつかの事:
テーブル名( streets (街路))の後に、配置したい 列 の名前を列挙します(この場合は name (名前)列 のみ)。
values キーワードの後にフィールドの値のリストを置きます。
文字列は単一引用符で囲む必要があります。
id 列には値を挿入していないことに注意してください。それはシーケンスであり、自動生成されるためです。
id を手動で設定すると、データベースの整合性に深刻な問題を引き起こす可能性があります。
成功した場合 INSERT 0 1 と表示されるはずです。
テーブル内のすべてのデータを選択して、挿入アクションの結果を見ることができます:
select * from streets;
結果:
select * from streets;
id | name
----+-------------
1 | High street
(1 row)
Try Yourself
INSERT コマンドを使用して streets テーブルに新しい道路を追加してください。
答え
使うべきSQLコマンドはこのようなものです(街路の名称はあなたが選んだもので置き換えることができます):
insert into streets (name) values ('Low Road');
15.3.2. 制約に従ってデータの追加を順序付けする
15.3.3. Try Yourself
人物オブジェクトを以下の詳細を持つ people テーブルに追加してみましょう:
Name: Joe Smith
House Number: 55
Street: Main Street
Phone: 072 882 33 21
注釈
この例では、文字列ではなく整数として電話番号を定義したことを思い出してください。
この時点では、 streets 表にあるメインストリートのレコードを最初に作成せずにこれを実行しようとすると、エラーレポートが出ているはずです。
以下のことに気づいたはずです:
その名前を使用して街路を追加できません
最初に街路テーブルに街路レコードを作成しないと、街路 id を使用して街路を追加できません
2つのテーブルが主キー/外部キーのペアを介して結合していることに注意してください。これは、有効な人は有効な対応する街路レコードも存在していなければ作成できないことを意味します。
上記の知識を使用して、データベースに新しい人を追加します。
答え
正しいSQL文は次のとおりです:
insert into streets (name) values('Main Road');
insert into people (name,house_no, street_id, phone_no)
values ('Joe Smith',55,2,'072 882 33 21');
(先ほどと同じようにselect文を使って)もう一度街路テーブルを見てみると、Main Road
のエントリの id が 2 であることがわかるでしょう。
そのため、上記のように単に数字の 2
を入力することができます。上のエントリで Main Road
が完全に書き込まれていなくても、データベースはそれを street_id の値 2 と関連付けることができるのです。
すでに新しい街路オブジェクトを追加している場合、その新しい Main Road
は 2 ではなく *3*の id を持っていることに気づくでしょう。
15.3.4. データを選択
レコードを選択するための構文はすでに示しました。さらにいくつかの例を見てみましょう:
select name from streets;
select * from streets;
select * from streets where name='Main Road';
後のセッションでは、データを選択してフィルタリングする方法について詳細に見て行きます。
15.3.5. データを更新
何か既存のデータに変更を加えたい場合は?例えば、街路名が変更されます:
update streets set name='New Main Road' where name='Main Road';
このようなupdate文はきわめて慎重に使用してください - WHERE 句に複数のレコードが一致した場合、それらはすべて更新されます!
よりよい解決策は、テーブルの主キーを使用して変更するレコードを参照することです:
update streets set name='New Main Road' where id=2;
それは UPDATE 1 を返す必要があります。
注釈
WHERE 文の基準では大文字と小文字が区別されます。Main Road は Main road と同じではありません
15.3.6. データを削除
テーブルからオブジェクトを削除するために、DELETE コマンドを使用してください:
delete from people where name = 'Joe Smith';
今度は人々のテーブルを見てみましょう:
address=# select * from people;
id | name | house_no | street_id | phone_no
----+------+----------+-----------+----------
(0 rows)
15.3.7. Try Yourself
学んだスキルを使用して、データベースに新しい友達を何人か追加してください:
name | house_no | street_id | phone_no
-----------------+----------+-----------+--------------
Joe Bloggs | 3 | 2 | 072 887 23 45
Jane Smith | 55 | 3 | 072 837 33 35
Roger Jones | 33 | 1 | 072 832 31 38
Sally Norman | 83 | 1 | 072 932 31 32
15.3.8. In Conclusion
以前に作成した既存のモデルに新しいデータを追加する方法がわかりましたね。データの新しい種類を追加したい場合は、そのデータを格納する新しいモデルを変更かつ/または作成したいこともあることを忘れないでください。
15.3.9. What's Next?
データを追加してしまったので、クエリを使用してさまざまな方法でこのデータにアクセスする方法を学びましょう。