选择更新和3个用户

时间:2011-07-09 10:13:58

标签: mysql select innodb

我有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同时运行代码

1 个答案:

答案 0 :(得分:0)

InnoDB在执行select ... for update时使用行级锁定,即只影响现有行。

您需要的是MySQL的AUTO_INCREMENT功能。