Mysql排他制御が必要かどうか教えてください。

PHPでmysqlに1つのテーブルだけの掲示板を作るのですが、複数人が同時に書き込んだり削除、修正があり得ます。
1つのレコードに対しては書き込み本人の1人だけが修正削除できるので1レコードを同時に更新することはないです。
本人の書き込みだけを一気に削除する処理もつけます。
利用者は40人前後ですが利用時間が集中するかもしれないです。
これまで1つのPCから更新するものしか作った事がなく、ストレージも気にする事無く
デフォルトのMyISAMしか使っておらず排他制御を考えたことがありませんでした。
今回のような1つのレコードの同時更新はないけど、1つのテーブル内には同時に
書き込みや削除を行う場合、排他制御は必要でしょうか?
テーブルのストレージをInnoDBにする必要ありでしょうか?
InnoDBにしてなおかつ、ロック等をかけるのが基本でしょうか?
教えて頂ければ助かりますm(__)m

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2013/11/26 23:12:24
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:degucho No.1

回答回数281ベストアンサー獲得回数75

ポイント100pt

まずMyISAMはテーブルロックが行われるため同時書き込みができません
(待ちが発生します)
現行バージョンはデフォルトがInnoDBになっていますし
特別な理由(MyISAMのメリットが必要)がない限りInnoDBを選択すべきと思います。
ロジカルな排他制御については、対象レコードについて
「書き込み本人の1人だけが修正削除」が担保されるなら
とりあえずは不要です。

id:cafet

ありがとうございます、安心しました。
現行のデフォルトがInnoDBというのも知りませんでした。。
コメントしてくれたcawbridge2013さんもすごく参考になりました。
便利なものを使わせてもらってるとつくづく思います。

2013/11/26 23:12:09
  • id:cawbridge2013
    MySQLとか一般的なDBソフトってDB側が排他制御処理をしてくれるのでphp
  • id:cawbridge2013
    失礼。

    phpプログラム上で排他制御処理を書く必要はないと思う。

    MySQLはロックフリーで、デッドロックが掛かるとしたら、テーブルが消えたときだけだろうね。レコードを全消ししようがデッドロックも見えないところでMySQL側が処理してくれる。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません