Php Mysql锁表100%保证只有一个用户可以编辑?

Php Mysql锁表100%保证只有一个用户可以编辑?,php,mysql,Php,Mysql,这是100%保证$unID对于每个访问web的用户都是唯一的 mysql表类型:MyISAM或者,您可以创建一个序列表: 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['u

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


mysql表类型:MyISAM

或者,您可以创建一个序列表:

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());
然后使用此查询获取下一个id:

CREATE TABLE sequence (id INT NOT NULL);
INSERT INTO sequence VALUES (0);
您可以使用
mysql\u insert\u id()
获取id

顺便说一句,尝试使用手册中的
PDO
mysqli

只有持有锁的会话才能访问表。在释放锁之前,其他会话无法访问它


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

如果你锁定MySQL只是为了生成一个唯一的用户令牌,那你就错了。没有100%的保证。。。如果同一个用户来自两个不同的IP地址等,会发生什么。。。这将获取视图的数量,而不是唯一视图的数量views@MahmoudAL-Qudsi我不想使用InnoDB,所以在MyISAM中获得唯一ID的唯一方法是使用锁表,对吗?@Ben我不使用这个来计算用户总数,他们IP的im使用这个计数器还有其他原因。所以我只需要知道,这个unID对于每个访问我网站的用户来说都是唯一的吗,即使有10个用户同时连接。@MahmoudAl Qudsi,你在说什么?锁定呼叫被阻塞。同时点击不会触发错误。这将导致表锁定无效。虽然问题的代码和用途可能不是一流的,但它仍然是一个有效的问题。@waza123没问题,它实际上比您自己的更好,而且100%独特:)
UPDATE sequence SET id=LAST_INSERT_ID(id+1);