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

时间:2012-05-27 13:40:51

标签: php mysql

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 对于访问网络的每个用户都是唯一的吗?

mysql表类型:MyISAM

2 个答案:

答案 0 :(得分: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()来获取ID。

顺便说一下,尝试使用PDOmysqli

答案 1 :(得分:1)

从手册:

  

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

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