Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » MySQL - Изоляция, SELECT FOR UPDATE

Ответить
Настройки темы
MySQL - Изоляция, SELECT FOR UPDATE

Пользователь


Сообщения: 73
Благодарности: 5

Профиль | Отправить PM | Цитировать


Изменения
Автор: evpu
Дата: 25-02-2019
Добрый день!

Оптимизирую код, вычищал места где запросы проходят не атомарно.
К примеру, есть основная таблица аккаунтов, есть гостевая. Переделываю в связи с ОЧЕНЬ большим количеством параллельных потоков, и высокой вероятностью обращения к одному иденту из разных потоков.
UPDATE main_acc SET balance=(balance-"tarif") WHERE id="XXXX" //это главная таблица
UPDATE guest_acc SET balance = (SELECT balance FROM main_acc WHERE id="XXXX" LIMIT 1 FOR UPDATE) WHERE main_id="XXXX" //это "альтернативные локации"

Тарификация, короче.
Было иначе, сначала считывал, потом обновлял.
И тут возник вопрос, а что будет, если другой поток спросит SELECT id FROM main_acc WHERE hex_ident="HEX" - к слову, поле hex_ident не является первичным, но является уникальным.
Если строка в этот момент будет в блокировке, то что произойдет? Будет ждать освобождения строки, надеюсь???
Т.е если под критерий SELECT...WHERE попадают строки находящиеся в блокировке, они не исключаются из выборки? А то чревато ложным появлением ситуации "account not found" со всеми вытекающими прискорбными последствиями

Отправлено: 10:16, 25-02-2019

 

Ветеран


Contributor


Сообщения: 24290
Благодарности: 7058

Профиль | Отправить PM | Цитировать


evpu, по-хорошему, документацию читать надо. Бо, хоть принципы у реляционных баз данных и общие, но реализация может иметь отличия в ту или иную сторону, причём не только у разных продуктов, но у разных версий одного и того же продукта.

Отправлено: 14:05, 25-02-2019 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Сообщения: 2930
Благодарности: 611

Профиль | Отправить PM | Цитировать


Цитата evpu:
Было иначе, сначала считывал, потом обновлял. »
сейчас то же самое. "атомарно" будет через join
и вообще это по уму делается через триггер

из select ничего случайным/волшебным образом не исключается

Цитата Iska:
по-хорошему, документацию читать надо »
+1

Отправлено: 20:30, 25-02-2019 | #3



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » MySQL - Изоляция, SELECT FOR UPDATE

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - Изоляция графов аудиоустройств грузит проц DimonNT Microsoft Windows 10 1 06-08-2015 19:12
Прочее - [решено] Изоляция машин от других в сети. volodija@vk Сетевое оборудование 9 29-05-2015 14:39
Прочее - Изоляция Сети от ПК из других сетей volodija@vk Сетевое оборудование 11 16-04-2015 08:13
2008 - Изоляция одной сети от другой. Необходим совет. DemonSKED Windows Server 2008/2008 R2 23 19-11-2010 16:57
Изоляция пользователей fire_on_line Microsoft Windows NT/2000/2003 9 18-07-2006 00:21




 
Переход