dポイントプレゼントキャンペーン実施中!

mysqlを使おうと勉強中です
mysqlに同時書き込みした場合についての質問です

例えば,5人のユーザーが同時に書き込んだとします。書き込むレコードは全て違います
ユーザー1がレコード1行目に書き込み
ユーザー2がレコード2行目に書き込み
ユーザー3がレコード3行目に書き込み
ユーザー4がレコード4行目に書き込み
ユーザー5がレコード5行目に書き込み

この場合は、普通のtableで処理できますか?

A 回答 (2件)

やはり先の回答で書いておくべきだったかもしれませんが、


質問にある例では各ユーザーが別々のレコードに書き込みをしていますよね。

この場合だとお互いの書き込みが他のユーザーの書き込みに影響を及ぼさないのでロックを取る必要が無いと思います。あと、ちょっと気になったので調べた感じだと、UPDATEで更新する場合もロックは不要みたいですね。

> 何も指定しないで下記の方法でテーブルをつくりました
> この場合は、MyISAMになるんですか?

そうです。
InnoDBを使うにはテーブル作成時に明示する必要があります。
http://dev.mysql.com/doc/refman/4.1/ja/using-inn …

> その場合、自動でテーブルロックしてくれるってことでしょうか?

してくれません。
自分で明示的にテーブルをロック / アンロックしてください。
http://dev.mysql.com/doc/refman/4.1/ja/lock-tabl …

あと、MyISAMはトランザクションセーフテーブルではないので、いわゆるトランザクションには使えないと思います。トランザクションの場合はCOMMITをするまで値が反映されてはいけませんので。
http://dev.mysql.com/doc/refman/4.1/ja/commit.html
http://dev.mysql.com/doc/refman/4.1/ja/table-typ …

> みなさんはphpやperlからmysqlを使う場合は、どのテーブルを使っていますか?InnoDBを使うのが一般的なのでしょうか?

MyISAMが一般的だと思いますが、適材適所ではないでしょうか。
例えばwordpress (http://ja.wordpress.org/) ではデフォルトのMyISAMを使っているようです。
自分が見た範囲では特にLOCK TABLESも登場しないように思います。
UPDATEは時々出てきますが、UPDATEによる更新はアトミックな処理になるようなので行の更新をする程度ならロックを取る必要はないのかもしれません。
http://dev.mysql.com/doc/refman/5.1/ja/ansi-diff …

かつてMySQLを選ぶ理由はトランザクションがない代わりに速いということだったので、色々と工夫をしてMyISAMを使うというのが普通なのかもしれません。しかしながら、MyISAMにはトランザクションの機能がないので、InnoDBを普通は選ぶべきという意見もあります。
Top 10 MySQL Mistakes Made By PHP Developers
http://www.sitepoint.com/mysql-mistakes-php-deve …
| 1. Using MyISAM rather than InnoDB
ただ、この記事へのコメントでDavidさん他多数がMyISAMよりInnoDBは非常に遅くて使いものにならないし、DBの設計を適切にすればMyISAMでも問題なく使えると主張しているので、InnoDBを使えば万事解決というわけでもないようです。
    • good
    • 0
この回答へのお礼

お答えいただきありがとうございます。
勉強になりました
同じ行への書き込みがないようにうまくやってみることにしました
MyISAMがmysqlの持ち味みたいなので
MyISAMでとりあえずやってみます

お礼日時:2013/03/23 19:11

普通はInnoDBだと思います。


http://dev.mysql.com/doc/refman/5.1-olh/ja/innod …

質問しているのは行ロックをMySQLでデフォルトのMyISAMでとれるかだと思うのですが、MyISAMではテーブル単位のロックしかありません。
http://dev.mysql.com/doc/refman/5.1/ja/internal- …
    • good
    • 0
この回答へのお礼

何も指定しないで下記の方法でテーブルをつくりました
この場合は、MyISAMになるんですか?
その場合、自動でテーブルロックしてくれるってことでしょうか?

CREATE TABLE test (
id int(6),
name VARCHAR(255)
)

みなさんはphpやperlからmysqlを使う場合は、どのテーブルを使っていますか?InnoDBを使うのが一般的なのでしょうか?

お礼日時:2013/03/23 10:12

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す