MySql-, Когда должен, я использую замок

У меня есть пользовательский стол с gifts_count и user_id области

Я должен добавить замок к следующему заявлению (это может прибыть из многих нитей)?

update users set gifts_count = gifts_count + 1 where users.user_id = user_id;
1
nl ja de

1 ответы

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

Сессия в качестве примера выглядела бы примерно так:

START TRANSACTION;
UPDATE `users` SET `gifts_count` = `gifts_count` + 1 WHERE `users`.`user_id` = user_id;
COMMIT;

Можно также сделать некоторые проверки целостности, если вам было нужно к (в зависимости от того, что вы делаете), между вопросом и ПЕРЕДАЮТ , если что-то идет не так, как надо, можно всегда использовать ОБРАТНУЮ ПЕРЕМОТКУ .


Если вы хотите предотвратить, читает на определенном ряде, когда он обновил (если использование InnoDB с захватом уровня ряда), можно управлять вашим , ИЗБРАННЫЙ вопрос с ЗАМОК В СПОСОБЕ АКЦИИ в конце, как так:

SELECT * FROM `users` `users`.`user_id` = user_id LOCK IN SHARE MODE;

Тот вопрос будет висеть, пока ваша сделка не , ПЕРЕДАЮТ редактор или ОБРАТНАЯ ПЕРЕМОТКА 'd.

2
добавлено
Когда я буду использовать сделку, мой gifts_count будет доступен для чтения?
добавлено автор Ilya Gazman, источник
@Babibu Они. Я предполагаю если вы didn' t хотят, чтобы это было возможно, вы должны захват использования (т.е. уровень ряда прочитанный замок);) РЕДАКТИРУЮТ : На самом деле, I' m даже уверенный больше, haven' t использовал это в некоторое время, позвольте мне проверить.
добавлено автор Rudi Visser, источник
@Babibu Да, it' s все еще удобочитаемый.
добавлено автор Rudi Visser, источник
DBA - русскоговорящее сообщество
DBA - русскоговорящее сообщество
1 345 участник(ов)

Общаемся и обсуждаем темы, посвященные DBA, PostgreSQL, Redis, MongoDB, MySQL, neo4j, riak и т.д. См. также: @devops_ru, @kubernetes_ru, @docker_ru, @nodejs_ru Рекомендуем сразу отключить уведомления, чтобы пребывание здесь было полезным и комфортным.

MySQL
MySQL
995 участник(ов)

The group is about MySQL. For code use hastebin.com. Admin: @smlkw