我有这个代码,并用3个用户进行了测试
<?php
mysql_query("BEGIN");
$r=mysql_query("SELECT max(Ticket) from ticket FOR UPDATE");
$row=mysql_fetch_row($r);
$k=$row[0];
echo $k;
for ($j=1;$j<100000;$j++) {
$k++;
$r=mysql_query("insert into ticket (Ticket) values ('$k')");
}
mysql_query("COMMIT");
?>我期望看到这样的结果
user1 0
user2 9999
user3 19998但我看到了这个结果
user1 0
user1 **9999**
user3 **9999**即使我有一个select for update,user2和user3似乎也同时运行代码
发布于 2011-07-09 18:24:57
在执行select ... for update时,InnoDB使用行级锁定,即只影响现有的行。
您需要的是MySQL的AUTO_INCREMENT特性。
https://stackoverflow.com/questions/6634127
复制相似问题