выберите для обновления и 3 пользователей - PullRequest
0 голосов
/ 09 июля 2011

У меня есть этот код и тест с 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**

кажется, user2 и user3 запускают код одновременно, даже если у меня есть выбор для обновления

1 Ответ

0 голосов
/ 09 июля 2011

InnoDB использует блокировку на уровне строк при выполнении select ... for update, то есть затрагиваются только существующие строки.

Что вам нужно, так это функция MySQL AUTO_INCREMENT.

...