0

server1、server2、server3 に 3 つの php スクリプトがあります。データベース「watch」を持つリモートmysql server4があります-1つの列「data」を持つテーブル「mytable」

これらのスクリプトはすべて、データベース「ウォッチ」テーブル「ウォッチ」列「データ」に接続し、すべて同じ操作を行います。

  1. 列「データ」の最初の行を選択
  2. データで操作する
  3. 列「データ」の最初の行を削除
$connect = mysql_connect("ip","user","password") OR DIE("Can't connect ");
            mysql_select_db("watch") or die("Can't select database");
    $xv=1
    do {
    $select = mysql_query("SELECT data FROM mytable LIMIT 1") or 
               die("wrong select");
             if (!$select) {
             echo 'Could not run query: ' . mysql_error(); 
             exit;}
             $data = mysql_fetch_row($select);
    -----------
    operation with first row of "data" 
    -------------

    mysql_query("DELETE FROM mytable LIMIT 1") or die("wrong delete");

    } while ($xv++<100);

例えば、

「データ」の最初の行には、一意の値「アレックス」が含まれています。

"data" の 2 行目には、一意の値 "Michael" が含まれています。

"data" の 3 行目には、一意の値 "George" が含まれています。

PHP スクリプトは cron で同時に実行されますが、異なるサーバーから実行されます。

2 つまたは 3 つすべてのスクリプトが最初の行「Alex」の同じ値を選択する可能性はありますか?

2 つまたは 3 つのスクリプトが最初の行の同じ値を同時に選択することは避けたいと思います。

4

2 に答える 2

1

mysql でそれを行う唯一の方法は、読み取りまたは書き込みの前にテーブルをロックすることだと思います。ここにリンクがあります: http://dev.mysql.com/doc/refman/5.0/en/lock-tables.html

テーブルのロックを解除することを忘れないでください。発生する可能性のあるすべての例外をキャッチするようにしてください。そうしないと、テーブルが長時間ロックされる可能性があります。

于 2012-09-06T07:27:31.963 に答える