0

APIサーバーがリクエストからSQLサーバーにアクセスすると仮定すると、MySQLサーバーへの接続はそのようなものです。

    @mysql_connect(HOSTNAME,DATABASE_USER, DATABASE_PASSWORD) or die('Could not connect to : ' . mysql_error());

    @mysql_select_db(DATABASE_NAME) or die( "<-----------------------Unable to select database------------------>");     

接続が既に開かれているかどうかを検出する方法はありますか? 開いている場合は、SQL トランザクションを作成します。

テーブル A にアクセスしているときに、外部から別の API リクエスト呼び出しが来て、テーブル B にアクセスしたいとします。

テーブル A の操作がまだ進行中のときに、テーブル B へのアクセスを開始することは可能ですか?

つまり、テーブル A へのアクセスが完了するのを待たないでください。テーブル B にアクセスするとすぐに開始します。

4

1 に答える 1

1

@jasonwhite同時実行性はDBMSレベルで処理されると思います。これは、問題の操作に応じて、同時に2つの操作を実行する可能性をすでにサポートしています。たとえば、操作 1 がSELECT 操作で、操作 2 がINSERT 操作の場合、両方を同時に実行できます。実際、テーブルが外部キー制約を介して関連付けられている場合を除いて、操作の種類に関係なく、これは可能です。これは、MySQL が操作中のテーブル ロックを実装しているためです。操作が実行されている間はテーブルをロックし、操作が完了するとテーブルを解放します。

接続が既に存在するかどうかの確認に関しては、接続が既に存在するかどうかを確認するシングルトンメソッドを実装する必要があります。そうでない場合は、作成して返します。存在する場合は、既存の接続を返します。これは次のようになります。

function getConnection() {
    global $conn; //I do not recommend using globals, rather create a class for this
    if(is_null($conn)) {
         $conn = mysql_connect(HOSTNAME,DATABASE_USER, DATABASE_PASSWORD) or die('Could not connect to : ' . mysql_error());    
         mysql_select_db(DATABASE_NAME) or die( "<-----------------------Unable to select database------------------>");
    }
    return $conn;        
}

私の知る限り、実行中にある操作が別の操作を待機するかどうかをこれ以上制御することはできません。私の0.02ドル。

于 2012-09-17T09:50:31.450 に答える