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());

这是 100% 保证$unID对于每个访问 web 的用户都是唯一的?

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);

您可以使用mysql_insert_id().

顺便说一句,尝试使用PDOor mysqli

于 2012-05-27T13:51:13.457 回答
1

从手册:

只有持有锁的会话才能访问该表。在释放锁之前,没有其他会话可以访问它。

所以答案是肯定的,数字将是唯一的。

于 2012-05-27T13:51:17.577 回答