Version Numberというデザインパターン

シーケンスなどの形でアップデートの通番を管理する。
参照時にその値を取得して、更新時に現在値をチェックする。
具体的な流れとしては、

1.SELECT col1 , col2 , ... , sequence FROM tb1 WHERE target_row = row_a;
2.resultsetの値を更新し、sequence = sequence + 1 <- 別トランザクションからの変更
3.UPDATE tab1 SET update_col = update_value , sequence = 1で取得.sequence + 1 WHERE target_row = row_a AND sequence = 1で取得.sequence

上の場合、WHERE条件に一致する行がなくなるため、更新結果は0件となる。
つまり、ロストアップデートの可能性があれば、0件となる。
0件の場合には、アプリ側で例外処理を行なう形にする。

ユーザの1連のアクションに対して共有/排他ロックをかけてしまうことを悲観ロック、
Webアプリのようにトランザクションの期間を短くし、ロジックでカバーするロックを楽観ロックという、
らすぃ。

連番列にシーケンスではなく、タイムスタンプを使う方法もあるが、
MySQLでは秒単位までしか扱えないから、お勧めできない。
らすぃ。。