回答編集履歴
1
補足
answer
CHANGED
@@ -4,5 +4,7 @@
|
|
4
4
|
- 追加は、article_idを事前に採番していますが、それがあまり良くないと思います。article_idは自動採番(AUTO_INCREMENT)にしておいて、INSERT時に自動的に採番するようにすれば、それで排他制御ができると思います。
|
5
5
|
- 削除は、事前にarticle_idが該当するレコードをfindで調べていますが、その必要もなく単にdeleteすればいいと思います。もし該当データがなかったら、スルーされるだけです。
|
6
6
|
|
7
|
-
むしろ以下のような場合に、よくトランザクションを使いますね
|
7
|
+
むしろ、以下のような場合に、よくトランザクションを使いますね
|
8
|
-
例えば、記事データに関連するタグ情報があって、それらを別のinsertで実行する場合、途中までinsertした状態で他のユーザにselectされたら一貫性が保てない。なので、複数のinsertをトランザクションにする。また最初のinsertは成功したけど、後のinsertが失敗したので、ロールバックして最初のinsertを取り消す場合など。
|
8
|
+
例えば、記事データに関連するタグ情報があって、それらを別のinsertで実行する場合、途中までinsertした状態で他のユーザにselectされたら一貫性が保てない。なので、複数のinsertをトランザクションにする。また最初のinsertは成功したけど、後のinsertが失敗したので、ロールバックして最初のinsertを取り消す場合など。
|
9
|
+
|
10
|
+
なお、どうしてもロックをかけたかったらmaisumakunさんの回答のように[SELECT ... FOR UPDATE](https://dev.mysql.com/doc/refman/5.6/ja/innodb-locking-reads.html)を使えばできると思います。
|