2017-12-09 16 views
1

必ずしもその後のPHPでmulti_queryのです。別のプロセスがインターセプトされ、デッドロックが発生することがあります。は、以下の例を考えると

MySQLは、後で他のプロセスを実行せずに実行されることを保証しますか?

トランザクション/ロックを提案しないでください。この質問は、multi_queryとその詳細に関するものです。 PHPで

コード例:

もちろん
$query = "SELECT * FROM `table`;"; 
$query .= "INSERT INTO `table` SET `x` = 'y' WHERE `x` = 2;"; 
$mysqli->multi_query($query); 
+1

がトランザクションを見てくださいされ、彼らはあなたのINSERTは、データを選択し、それを追加するだけの場合であれば、INSERTに見て –

+0

をあなたを助けるかもしれません... 2つを組み合わせたSELECT文。常に可能なわけではありませんが、関連する場合は有用なツールです。 –

+0

*別のプロセスが傍受し、デッドロックが発生する可能性があります。*最初のクエリを介してテーブルレベルの書き込みロックを取得したら、別のプロセスがどのくらい正確に干渉しますか? –

答えて

1

ありません。他のすべての世界を待つようにするなら、それはマルチクエリを使ってどんなサイトの地獄にもなります。

何を探してるんですが、ロックと、おそらく取引

+0

私の質問はあまりにも具体的なものかもしれません。トランザクションやロックの問題を解決する方法を知っています。しかし、私の質問は、これらのクエリが後続するかどうかに関して、特にmysqlの処理に関するものです。あなたの答えのソースはありますか? –

+0

さあ、お元気です。クエリが後続することを確認するには、テーブルをロックする必要があります。 **あなたのファンタジーのソースはありますか?複数のクエリが実行中のすべてのテーブルにロックをかけていることを伝える男性の文が1つありますか? –

+0

私はロックについて話していません。後続のクエリとテーブルのロックは、全く異なる2つのことです。書き込みロックのあるテーブルをロックすると、書き込みをしようとする他のすべての接続が保留になるという保証があります。しかし、他の接続では異なるテーブルでselectを発行することがあります(出典:自分自身を試してみてください)。しかし、私が探しているのは、サーバが保証しているサーバに任意の量のクエリを送信する方法です。それ以外の接続ではクエリを間に置くことはできません。たぶんmulti_queryが答えですが、これに関する信頼できるドキュメントは見つかりません –

関連する問題