Недавно я занимался веб-разработкой на PHP, что привело меня к изучению языка в целом. Пока мне не нужно было использовать его для взаимодействия с базой данных, но я знаю, что он предоставляет множество удобных функций для этого.
Хотя я знаю базовый SQL и работал с базовыми манипуляциями с данными в базе данных, я не понимаю, как веб-разработчики, основывающие свои сайты на PHP / Javascript / SQL, могут управлять пользователями, изменяющими одни и те же данные одновременно. время.
Например, допустим, у вас есть веб-сайт блэкджека, который делит пользователей на одну из двух команд при регистрации. Каждый раз, когда пользователь выигрывает игру, часть его выигрыша добавляется к промежуточному итогу для этой команды.
Итак, скажем, псевдокод для функции, которая делает это, выглядит примерно так:
...
$total = mysql_query("SELECT score FROM team1");
$total = $total + $mytotal;
mysql_query("UPDATE team1 SET score='".$total."'");
...
Если два игрока играют одновременно, вполне возможно, что они оба вызовут SELECT до того, как другой сможет увеличить и обновить таблицу, поэтому изменения одного пользователя будут немедленно перезаписаны.
Мой вопрос: как этого избежать? Это делается с помощью PHP на уровне кода, или есть какие-либо функции, предоставляемые любой базой данных, которую вы используете, которые помогают предотвратить это?
Я проводил некоторые исследования, и, похоже, PHP предоставляет механизм семафор , и я также заметил, что mysql предлагает функцию LOCK table . Однако я не уверен, какой из них, если таковой используется, используется на практике.