teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

補足

2016/10/26 20:40

投稿

popobot
popobot

スコア6588

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)を使えばできると思います。