У меня есть количество кликов для чего-то на моем сайте. Например, каждый пользовательский профиль может отображаться 500 раз на странице. Каждый раз, когда он появляется, я уменьшу 1.
CREATE TABLE IF NOT EXISTS 'show_profile' (
'id' int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
'user' INT(11) UNSIGNED NOT NULL,
'count'INT(11) UNSIGNED NOT NULL,
'data' datetime NOT NULL,
PRIMARY KEY ('id') ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
count имеет 500. Каждый раз, когда он появляется (rand), я удаляю 1. 499, 498. Но этот счет должен быть точным. если 2 пользователя открывают страницу одновременно, а mysql получает 499 для обоих, это уменьшит только 1.
Любые идеи, как это сделать точно?
Каждый запрос sql выполняется атомарно. Это означает, что если вы уменьшаете счетчик внутри оператора sql, вы всегда получаете правильный результат - даже если два запроса выполняются точно в одно и то же время.
UPDATE show_profile SET count = count - 1 WHERE id = ? AND count > 0
count > 0
и соответствующие строки возвращают значение, чтобы предотвратить отрицательный счет