私が考える2つの方法。まず、挿入または更新できない可能性がある場合は、最初にテーブルの状態を確認して、可能かどうかを確認します。アトミック操作が必要な場合は、このプロセス中にテーブルをロックして、テーブルをチェックして更新を行う間に別のプロセスがテーブルを変更しないようにすることができます。ただし、高レベルの同時実行が必要な場合は、速度が低下する可能性があります。
または、トランザクション エンジン (InnoDB はトランザクション対応ですが、MyISAM は対応していません) を使用している場合は、トランザクションを開始し、更新と挿入の戻り値を監視できます。
START TRANSACTION
..次に、操作の結果を確認します。PHPドキュメントから:
SELECT、SHOW、DESCRIBE、EXPLAIN、および結果セットを返すその他のステートメントの場合、mysql_query() は成功するとリソースを返し、エラーの場合は FALSE を返します。
他のタイプの SQL ステートメント、INSERT、UPDATE、DELETE、DROP などの場合、mysql_query() は成功時に TRUE を返し、エラー時に FALSE を返します。
返された結果リソースは、返されたデータにアクセスするために、mysql_fetch_array() および結果テーブルを処理するためのその他の関数に渡される必要があります。
mysql_num_rows() を使用して、SELECT ステートメントに対して返された行数を調べるか、mysql_affected_rows() を使用して、DELETE、INSERT、REPLACE、または UPDATE ステートメントによって影響を受けた行数を調べます。
成功しない場合は、変更をロールバックできます。
ROLLBACK
最後に、あなたのアプリケーションについて詳しく知らないと確信が持てませんが、そもそもこのような状況にならないようにデータセットとアプリケーションを設計することで、より高速になる可能性があります。トランザクションとテーブルのロックはどちらも遅いので、必要でない限り避けています。