🔩 ねじき教室 Go と Web の教室

Part 4

データベースと SQL

30秒でつかむ 保存したデータを、SQLで読み書きする
保存したデータを、SQLで読み書きするアプリがSQLを送り、データベースが表のデータを読み書きし、結果を返します。1GoアプリSQLを送る2データベース保存して探す3結果行で返る
  1. Goアプリ SQLを送る
  2. データベース 保存して探す
  3. 結果 行で返る

Web アプリの性能問題の大半はデータベースで起きます。 つまり ISUCON の主戦場です。 この Part では SQL の読み書きを身につけ、Go のプログラムからデータベースを使えるようにします。 最後に、インデックスがなぜ速いのかを競プロでおなじみの計算量の言葉で理解します。

この Part の所要時間は 4〜6 時間が目安です。 終えると、SQL を読み書きし、Go のプログラムから MySQL を安全に操作できます。 演習には Go と curl に加えて、Docker Desktop が必要です。

  1. なぜデータベースが要るのか 競プロにはなかった「データを残す」という要求から出発して、リレーショナルデータベースと SQL を導入します。
  2. SELECT でデータを取り出す 手元に MySQL を用意し、SELECT、WHERE、ORDER BY、LIMIT でデータを取り出せるようになります。
  3. テーブルを作って書き込む CREATE TABLE の読み方と、INSERT、UPDATE、DELETE によるデータの書き込みを学びます。
  4. 複数のテーブルと JOIN テーブルを分ける理由と、JOIN で複数のテーブルを突き合わせて読む方法を学びます。
  5. 集計する COUNT などの集計関数と、GROUP BY、HAVING によるグループごとの集計を学びます。
  6. Go から SQL を使う database/sql で Go プログラムから MySQL を読み書きし、SQL インジェクションを防ぐ書き方を学びます。
  7. インデックスはなぜ速いのか インデックスの正体である B+木を競プロの二分探索から理解し、EXPLAIN で実行計画を確かめます。
  8. トランザクション 複数の書き込みを「全部やるか、全部やらないか」にまとめるトランザクションを学びます。