Что будет делать MySQL, если он обновляется одновременно

0

После предложения предыдущего вопроса.

Теперь у меня есть счетчики посетителей, используя базу данных. При написании сценария я сомневался, что так помог SO.

Предположим, что в моей базе данных есть таблица с именем Total и значение равно 5.

Два разных посетителя посещают сайт одновременно, мой сценарий

$sqltc = "UPDATE visits SET Total='$ttl' WHERE Sr=1";
mysqli_query($link, $sqltc);

попытается обновить базу данных.

Теперь мое сомнение в том, что будет новым значением в таблице?

5 ИЛИ 6 ИЛИ 7 ИЛИ anything else?

Я знаю, что это редкий случай, но сайт, на котором будет использоваться сценарий, является сайтом викторины, и одновременно будет присутствовать масса посетителей.

Полный код скрипта:

$sql = "SELECT  * FROM visits WHERE Sr = '1'";
$result = mysqli_query($link, $sql);
$row = mysqli_fetch_array($result);

$date =  $row['Date'];
$ttcounter =  $row['Total'];

$ttcounter++;
$ttl = $ttcounter;

$sqltc = "UPDATE visits SET Total='$ttl' WHERE Sr=1";
mysqli_query($link, $sqltc);
Теги:

1 ответ

0

Более простым решением было бы сделать добавление, подобное этому

$sqltc = "UPDATE visits SET Total=Total+1 WHERE Sr=1";

Это просто добавит одно к существующему значению Total и вам больше не нужно будет извлекать значение старой строки и что-то добавить к нему, а затем снова обновить строку.

Это также устраняет вероятность того, что 2 посетителя попытаются извлечь текущее значение Total и оба посетителя переписывают текущее значение 5 с 6, например. MySQL будет следить за блокировкой строки, чтобы только один посетитель мог применить свое обновление, поэтому вы получите правильное значение 7.

  • 0
    Это решает только количественные скачки, а не более широкую концепцию множественного доступа и обновления к одним и тем же данным одновременно
  • 1
    @Martin MySQL должен следить за сериализацией нескольких обновлений в одной строке. Вот что делают движки баз данных

Ещё вопросы

Сообщество Overcoder
Наверх
Меню