STUDY_LOG_KOTA

IoT, Webプログラミングなどの学習記録をします。

Node.js超入門 5章 - SQLの基本『CRUD』

f:id:kota_ly:20220111002628p:plain

前置き

 前回は、データベースを「DB Browser for SQLite」で作成してアクセスするまでお試ししました。

 今回は、SQLの基本CRUD(=Create, Read, Update, Delete)を試しました。
 CRUDの各種動作、データベース処理の勘所の順で学んだことをメモします。

記事本文

Create(新規作成)の動作

既存のデータベースにレコードを追加する処理がCreateです。

f:id:kota_ly:20220121210257j:plain

/add にアクセスすると、フォームが出てきます。テーブルはフィールドとして「ID、名前、アドレス、年齢」がありますが、サンプルに従ってID以外の入力フォームを作っています。
設定すると次のように入力したレコードが追加されます。(beforeの写真がなくて差分がわからないですがすみません)

f:id:kota_ly:20220121210541j:plain

Read(読み込み)の動作

読み込み動作です。 全データをオブジェクトに丸々読み出すということは前回やりました。
しかし今回は、クエリパラメータで指定したIDのデータのみを検索して取り出しました。 /read?id=1 と指定すると、データベースからオブジェクトに取り出して、ejsでレンダリングして表示します。

f:id:kota_ly:20220121210653p:plain

ここらへんから、SQLの強みが垣間見えました。データベースから抜き出すところの処理は下記のような感じです。
定数 q に入れている文がSQLの文法のようです。 テーブル"mydata"から id を検索します。
アルゴリズムとかの理解が苦手なので、何が起きてるのか知らなきゃいけない?などドキドキしますが、一旦スルーします汗)

const q = "select * from mydata where id = ?";
db.get(q, [id], (err, row) => {
    // rowにオブジェクトが渡されるので、テンプレート(.ejs)に渡してレンダリング
}

これはIDだけですが、AND、OR、MAX、MINなど条件を組み合わせてデータを取り出せるようです。

Update(更新)の動作

次に更新です。 サンプルのGUI操作は、よくあるウェブサービスの個人情報の変更画面のようでワクワクします。
クエリーパラメータでIDを指定してアクセスし、フォームにデータベースからレコードを読み出します。そのフォーム上で新しい情報を修正し、SQLのupdate文で更新します。

下の画像が更新する内容で、Modifyの _modをつけて見ました。

f:id:kota_ly:20220121211924p:plain

次のように更新された結果が表示されます。 変なレコードが増えてるのは気にしないでください。

f:id:kota_ly:20220121212619p:plain

プログラムは下記のとおりです。
where id のところを書き忘れると、全レコードが書き換わるそうです。恐ろしい。

 const q = "update mydata set name = ?, mail = ?, age = ? where id = ?";
 db.serialize(() => {
        db.run(q, nm, ml, ag, id);
});

Delete(削除)の動作

最後の削除処理です。 クエリーでIDを指定してアクセスすると、次のような画面になります。
これは、 Read で学んだ処理と同じです。

f:id:kota_ly:20220121213008p:plain

そして、削除を押すと…。

f:id:kota_ly:20220121213157p:plain

消えました!

感想と疑問点

サンプルプログラムが長くて時間がかかりました。お陰でJavascript、ejs、フォーム、クエリーなど色々染み付いてきました。
疑問は、細かい話ですがフィールドのIDについてです。Createをしたときに実はIDを指定していません。最後のIDから勝手にインクリメントされて追加されました。
・一番大きいIDを調べて自動でインクリメントしている?(フィールドが番号とは限らず不思議)
・レコード数+1をしている?(Delete処理のあとに、もう一度データを追加したところ、IDがインクリメントされた)

次回

SQL言語について学習を進めたいですが、次の節「バリデーション」が技術的に大切そうです。目だけ通したいと思っています。
これを持って、この書籍は終わりたいと思います。

それでは、ヒラメを釣ってきます。 日曜日、続きがんばります。