さて、InnoDBで作ったテーブルに、
PHPからアクセスするとします。
トランザクション処理をする際に、
BEGIN
を送って
SELECT
して
大丈夫なら
INSERT
して
COMMIT
だめなら
ROLLBACK
という感じの処理があったとします。
でも、少し疑問に思ったのが、
PHPからアクセスするユーザーが、
1つのユーザー(として定義)なので、
同時処理の時に、やっぱり、うまくトランザクション処理できていないような気がします。
また、よく耳にするのが、『MySQLのトランザクションはいい加減で危ない』と聞いたりします。
はたして、MySQL+PHPの環境のトランザクション処理は、どこまで信頼できるのでしょうか?
同じユーザーでもコネクションが違えばトランザクションは保証されます。
『MySQLのトランザクションはいい加減で危ない』
どこの誰がいったか知りませんが自分は聞いたことはありません。
MyISAM 形式ではトランザクションが使用できず、テーブルロックに頼るしかない状況を誤解されているのではないでしょうか?
たしかに、エンタープライズのレベルで使用できるかは議論の分かれるところかもしれませんが、Web 系のシステムのほとんどでは十分なレベルで信頼できます。
間違いありません。
http://php.benscom.com/manual/ja/function.mysql-query.php
ただし、コネクションプールを使用してちゃんとプールに返還しないなど、コネクションを平行して利用してしまった場合などに不具合が出る可能性はあります。
ただ、標準ではコネクションプールはないので心配ないと思いますが。
あと、mysql_connect も一度に一回しか呼び出してはいけません。
2回目からは別のコネクションになりますので。
これらは普通に作っていけば守るべき項目なので、ちゃんと作っている限りはまったく問題ありません。
>mysql_connect も一度に一回しか呼び出してはいけません。
を
>第3引数に True を指定した mysql_connect を呼び出す時は注意が必要です。
に訂正します。
デフォルトではすでに存在しているコネクションを返すようなので問題なさそうです。
いずれにせよ今どのコネクションを使っているか、またそのコネクションでのトランザクションの状態はどうなっているかをきちんと管理して使う分には何の問題もありません。