Movatterモバイル変換


[0]ホーム

URL:


はてラボはてな匿名ダイアリー
ようこそ ゲスト さんログインユーザー登録
< anond:20190324155808 |anond:20190323215053 >

2019-03-24

anond:20190324094739

SQLアンチパターンではないが、デッドロックについても投げっぱなしのあのSELECT FOR UPDATEの説明はなんなのかね。

1回のトランザクションでupdateを2回発行する場合と1回のSQL複数行のアップデートをする時はデッドロックリスク考慮するってだけで、かなり初心者にはありがたいと思うんだけどね。

1回のトランザクション複数回update文を投げるケース

tA =#begin;tA =# update t1set column =value whereid = 1;tB =#begin;tB =# update t1set column =value whereid = 2;tA =# update t1set column =value whereid = 2;tB =# update t1set column =value whereid = 1;tB =#ERROR:デッドロックを検出しました

1回のSQL複数行のアップデート文を発行するケース

tA =#begin;tA =# update t1set column =value whereid = 1;tB =#begin;tB =# update t1set column =value -- updateall recordtA =# update t1set column =value whereid = 2;tA =#ERROR:デッドロックを検出しました

あと、先勝ち後負けを実現するのはSELECT FOR UPDATEではなく楽観的ロックな。

tA =#begin;tA =#select updated_at from t1 whereid = 1;         updated_at         ---------------------------- 2019-03-24 06:17:37.952893tB =#begin;tB =#select updated_at from t1 whereid = 1;         updated_at         ---------------------------- 2019-03-24 06:17:37.952893tA =# update t1set column = column - 1 whereid = 1 and update_at = '2019-03-24 06:17:37.952893' and column&gt; 0;UPDATE 1tB =# update t1set column = column - 1 whereid = 1 and update_at = '2019-03-24 06:17:37.952893' and column&gt; 0;UPDATE 0

MySQL存在しないレコード更新しようとするとギャップロックになるから注意な。

Permalink |記事への反応(1) | 15:59

このエントリーをはてなブックマークに追加ツイートシェア

記事への反応 -
  • キーレスエントリー(外部キー嫌い) 外部キー嫌いがアンチパターンなのは同意だが、間違った外部キーの使い方するほうがよっぽどアンチパターンじゃないか? 外部キー貼らなかったこ...

    • SQLアンチパターンではないが、デッドロックについても投げっぱなしのあのSELECT FOR UPDATEの説明はなんなのかね。 1回のトランザクションでupdateを2回発行する場合と1回のSQLで複数行のア...

      • 投げっぱなしの説明ってのは意味不明だけど、一回のクエリで複数行更新や削除するのは確かにデッドロックの温床になりそうだね。 クエリの順番性次第でデッドロックになるって知っ...

    • 削除フラグ持たせてユーザ名を「退会済みユーザ」に上書きしたろ! ↑ ダメなん?

      • 特別な理由があればいいと思うが、基本、nullableカラム持ったり状態をカラムに記録するのはアンチパターンらしいよ。 https://www.slideshare.net/t_wada/ronsakucasual https://qiita.com/Jxck_/items/156d0a231...

        • これDB屋の自己満足だよな 顧客の要望はたいていこの3つで 1.退職などの理由で無効化したIDは処理に含めない(ただしオプションで含める機能を付ける) 2.無効化を解除することもある...

      • そいうのは、削除フラグと言わずに、退会フラグ と言いなさい。

    • 大規模案件ほどシャーディングが前提になるから、 外部キー制約の出る幕なんて無いね

記事への反応(ブックマークコメント)

全てのコメントを見る

人気エントリ

注目エントリ

ログインユーザー登録
ようこそ ゲスト さん
Copyright (C) 2001-2025 hatena. All Rights Reserved.

[8]ページ先頭

©2009-2025 Movatter.jp