私とWeb日記 +α
Kichijoji.pm #5
Oct 9th, 2015
Profile
私とWeb日記
- 手動時代
- 2003年5月〜2004年10月
- 温かみのあるhtml手書き + FTP
- Movable Type時代
- 2005年9月〜2013年7月
- 596記事 / 95ヶ月
- Riji時代
足掛け10年。1ヶ月6記事程度。
ゆるく続ける
- 絶対毎日書くとか肩肘張らない
- 書きたいネタをストックしておく
書きやすい仕組みを作る
- Riji
- Markdownを
git push
したらサイト反映
- 更新も楽
第2部: 更新系SQLを手で打つ時に気をつけていること
- やりたくない
- しかしサーバーに入って、DBシェルに入って手作業でデータを更新しないといけない時はある
作成時の心得
WHERE条件をつけまくる
UPDATE
user
SET age = 35 WHERE
id = 1 AND
name = 'Songmu' AND
age = 34
- idだけで絞れるけど name も付けてレビュワーフレンドリー
- 変更前の値も条件に含める
- 34 -> 35になることがわかる
- 間違えていた時も戻せる
- ユーザー操作とのコンフリクトを検知
- 万が一履歴から誤爆しても更新されない(可能性が高い)
- SETとWHEREを一行にまとめてるのは変なところで小指が滑るのが怖いため
WHERE条件応用編
UPDATE
user
SET weapon_id = (SELECT id FROM weapon WHERE id = 1 AND name = '木刀') WHERE
id = 1 AND
name = 'Songmu' AND
weapon_id = (SELECT id FROM weapon WHERE id = 100 AND name = '村正')
- リレーション更新時にリレーション先のテーブルを参照する
削除編
DELETE FROM user WHERE
id = 1 AND
name = 'Songmu' AND
age = 35
考え方は同じ
- 削除前のデータを復元できるように
- セミコロンは書かない
オペレーション時の心得
historyを残さない
- .mysql_history から消す
- ヒストリに書き込まない設定にする
% MYSQL_HISTFILE=/dev/null mysql ...
- 参照用と更新用でシェルが分かれていると良い
bin/ro_mysql
bin/danger_mysql
- autocommit=0 にしておく
- where句 safe-updates
TRANSACTIONを張る
BEGIN;
and COMMIT;
- 更新クエリを打った時は更新行数を 注視 する
- 想定と異なったら、落ち着いて
ROLLBACK;
- 原因究明
- 別のところで更新された場合
- クエリが間違っている場合 (kowai)
- ちゃんと更新されてるか最後にSELECTして確認する
以上
We are Hiring
- はてなではエンジニアを募集しています
- 東京でも絶賛採用中
- もちろん京都にもおいでやす