ホームページ  >  記事  >  バックエンド開発  >  コードの一部が 2 つの SQL を実行するということは、2 つの SQL がエコーされることを意味しますが、今日は問題が発生しました。内容を読んでください。

コードの一部が 2 つの SQL を実行するということは、2 つの SQL がエコーされることを意味しますが、今日は問題が発生しました。内容を読んでください。

WBOY
WBOYオリジナル
2016-06-20 12:34:29905ブラウズ

データベースには多くのフィールドがあるため、例えで説明します
詳細情報テーブルのリスト
ユーザーテーブル user にはフィールド番号があります

リストに挿入するメソッドを実行しますデータが生成されるたびに、同時に num+1 がユーザー テーブルに送信されます。

先月、リスト テーブルに登録されているユーザーの数を計算してみました。ユーザーテーブルのnumでそれを行いました。

比較の結果、70人程度のリストデータの数はnumで記録した数よりも10件ほど少ないです。

メソッドは順番に実行されるため、順序は次のようになります。
public function test(){
insert $data;
update num+1;
}

最初にユーザー番号フィールドをリストに挿入し、次にユーザー番号フィールドを更新します


この種のデータの非同期はどのような状況で発生するのかお聞きしたいです。コードを投稿しないでください。


ディスカッションへの返信 (解決策)

あなた あなたトランザクションを使用する必要があります
$data の挿入または num+1 の更新が失敗した場合に操作を元に戻します


トランザクション処理を使用していますか?挿入が成功したかどうかを判断してフィールドを更新するかどうか
insert $data; 失敗しても実行される update num+1; は矛盾します

トランザクション処理が使用されますか?挿入が成功したかどうかを判断してからフィールドを更新するかどうか
insert $data; 失敗したが、それでも実行された update num+1 は矛盾します



兄弟、通常はどのような状況で実行されますか?失敗しますか? 何もないような気がします この状況は挿入ステートメントであり、ユーザー名は携帯電話番号です。フィールドは空にすることもできます

携帯電話番号が重複し、書き込まれた値とフィールドの種類が一致しないと失敗する可能性があります
データベースに書き込む前にユーザー データをフィルタリングする必要があります

モバイル電話番号 重複、書き込まれた値、フィールド タイプの不一致は失敗する可能性があります
データベースに書き込む前にユーザー データをフィルタリングする必要があります



その日にモニターを書いたのはフィルタリングされていたはずです。今のところ問題はありません。何か問題が発生したときに何が起こっているかがわかります、ありがとう。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。