select for update and 3 users
I have this code and test with 3 users
<?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");
?>
I expect to see this result
user1 0
user2 9999
user3 19998
but i see this result
user1 0
user1 **9999**
user3 **9999**
it seems user2 and user3 ru开发者_JS百科n code at same time even if I have a select for update
InnoDB uses row-level locking when executing select ... for update
, i.e. only existing rows are affected.
What you need is MySQL's AUTO_INCREMENT
feature.
精彩评论