Node.js超入門 5章 - SQLの基本『CRUD』
前置き
前回は、データベースを「DB Browser for SQLite」で作成してアクセスするまでお試ししました。
今回は、SQLの基本CRUD(=Create, Read, Update, Delete)を試しました。
CRUDの各種動作、データベース処理の勘所の順で学んだことをメモします。
記事本文
Create(新規作成)の動作
既存のデータベースにレコードを追加する処理がCreateです。
/add にアクセスすると、フォームが出てきます。テーブルはフィールドとして「ID、名前、アドレス、年齢」がありますが、サンプルに従ってID以外の入力フォームを作っています。
設定すると次のように入力したレコードが追加されます。(beforeの写真がなくて差分がわからないですがすみません)
Read(読み込み)の動作
読み込み動作です。 全データをオブジェクトに丸々読み出すということは前回やりました。
しかし今回は、クエリパラメータで指定したIDのデータのみを検索して取り出しました。
/read?id=1 と指定すると、データベースからオブジェクトに取り出して、ejsでレンダリングして表示します。
ここらへんから、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をつけて見ました。
次のように更新された結果が表示されます。 変なレコードが増えてるのは気にしないでください。
プログラムは下記のとおりです。
where id のところを書き忘れると、全レコードが書き換わるそうです。恐ろしい。
const q = "update mydata set name = ?, mail = ?, age = ? where id = ?"; db.serialize(() => { db.run(q, nm, ml, ag, id); });
Delete(削除)の動作
最後の削除処理です。
クエリーでIDを指定してアクセスすると、次のような画面になります。
これは、 Read で学んだ処理と同じです。
そして、削除を押すと…。
消えました!
感想と疑問点
サンプルプログラムが長くて時間がかかりました。お陰でJavascript、ejs、フォーム、クエリーなど色々染み付いてきました。
疑問は、細かい話ですがフィールドのIDについてです。Createをしたときに実はIDを指定していません。最後のIDから勝手にインクリメントされて追加されました。
・一番大きいIDを調べて自動でインクリメントしている?(フィールドが番号とは限らず不思議)
・レコード数+1をしている?(Delete処理のあとに、もう一度データを追加したところ、IDがインクリメントされた)
次回
非SQL言語について学習を進めたいですが、次の節「バリデーション」が技術的に大切そうです。目だけ通したいと思っています。
これを持って、この書籍は終わりたいと思います。
それでは、ヒラメを釣ってきます。 日曜日、続きがんばります。