Есть две таблицы:
Таблица 1 Уникальные сеансы
ID Count
Таблица 2 (Сеансы)
ID Name
Я хотел бы обновить счетчик
, только если имя
не существует в сеансах для подсчета уникальных сеансов, это пример, поэтому цель не состоит в том, чтобы делать это альтернативным способом, но вопрос:
Rowsaffected = Update table1
set Count = Count + 1
where (Select count(*) from table2 where Name = 'user1' ) = 0;
Insert into table2 (NAME) values('user');
Является ли первый запрос атомарным? Если да, то проблем нет.
Если нет, то что делать, если для выполнения вышеупомянутых операций выполняется несколько потоков? Есть вероятность, что:
Поток 1: count возвращает 0, он обновил таблицу 1, но не таблицу 2 перед запуском потока 2. Поток 2: он находит счетчик 0, он также собирается обновить счетчик.
Теперь для того же пользователя счетчик равен 2, чего не должно происходить.
Любые предложения / отзывы.