2

私が達成しようとしていることは単純に思えますが、

データベースタイプ: MyISAM
テーブル構造: card_id, status
クエリ: テーブルから未使用の card_id を選択し、行を「使用済み」に設定します。

2 つのクエリが同時に実行され、ステータスが更新される前に、同じ card_id が 2 回フェッチされるのは競合状態ですか?

私はすでにいくつかの検索を行いました。Lock table は解決策のようですが、私にはやり過ぎであり、Lock Privilege が必要です。

何か案が?

ありがとう!

4

2 に答える 2

1

この質問を投稿した後、最後に述べたものとまったく同じ解決策を考えました。テーブルのプライマリ ID を返す「update TABLE set status ='used' where status = 'unused' limit 1」という update ステートメントを使用すると、このプライマリ ID を使用して cart_id を取得できます。あなたが言ったように、「MySQLはテーブル全体でロックを取得するため、2つのセッション間に「競合」状態はありません」と言うように、2つの更新ステートメントが同時に発生すると言うので、これで問題が解決するはずです。しかし、なぜ「MySQL はスタイル ステートメントをサポートしていない」と言ったのかわかりません。

于 2012-12-21T15:50:39.963 に答える