Здравствуйте!
Подскажите, пожалуйста, как мне получить значение folder2 в таблице и после этого сразу же инкрементировать это значение на +1. Важно, чтобы при большом количестве одновременных запросов полученные значения folder2 не повторялись.
+----+---------+--------+
| id | folder1 | folder2|
+----+---------+--------+
| 1 | 235 | 13 |
+----+---------+--------+
Запрос в php я бы сделал так:
$sql_query1 = "SELECT folder2 from tbl_name";
$sql_query2 = "UPDATE tbl_name SET folder2 = folder2 + 1"
Но, что если между $sql_query1 и sql_query2 пройдёт какое-то время, а другие пользователи также будут выполнять скрипт. Тогда у какого-то количества пользователей будет совпадение значений folder2.
Как этого можно избежать?
Спасибо!
Вам поможет блокировка таблиц:
$sql_query1 = "LOCK TABLE folder2 WRITE";
$sql_query2 = "SELECT folder2 from tbl_name";
$sql_query3 = "UPDATE tbl_name SET folder2 = folder2 + 1"
$sql_query4 = "UNLOCK TABLES";
В этом случае, даже если между query2 и query3 будет запущен SQL-запрос другим пользователем(подключением), он будет ждать, пока не будет снята блокировка пользователем(подключением), который её установил, запросом в query4.
Если таблица типа MyISAM - то можно поставить блокировку на строку, что будет менее затратно по ресурсам, но с этим вопросом вам лучше разобраться подробнее, прочитав про "Транзакции MyISAM".
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости