1
mysql_query("LOCK TABLES `counter` WRITE;") or die(mysql_error());
$res = mysql_query("SELECT `unID` FROM `counter`;") or die(mysql_error());
$row = mysql_fetch_assoc($res);
$unID = $row['unID'] + 1;
mysql_query("UPDATE `counter` SET `unID`=`unID`+1;") or die(mysql_error());
mysql_query("UNLOCK TABLES;") or die(mysql_error());

これは、Web にアクセスするすべてのユーザーに対して$unIDが一意であるという 100% の保証です。

mysql テーブル タイプ: MyISAM

4

2 に答える 2

1

または、シーケンス テーブルを作成することもできます。

CREATE TABLE sequence (id INT NOT NULL);
INSERT INTO sequence VALUES (0);

次に、このクエリを使用して次の ID を取得します。

UPDATE sequence SET id=LAST_INSERT_ID(id+1);

を使用して ID を取得できますmysql_insert_id()

ところで、PDOまたはを使用してみてくださいmysqli

于 2012-05-27T13:51:13.457 に答える
1

マニュアルから:

ロックを保持しているセッションのみがテーブルにアクセスできます。ロックが解除されるまで、他のセッションはアクセスできません。

したがって、答えはイエスです。番号は一意になります。

于 2012-05-27T13:51:17.577 に答える