powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Блокировка таблиц в хранимой процедуре?
6 сообщений из 6, страница 1 из 1
Блокировка таблиц в хранимой процедуре?
    #38521197
OlegROA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день, коллеги!

Судя по доке , в хранимых процедурах нельзя использовать блокировку таблиц.

Есть хранимка, в которой пересчитываются некоторые итоговые цифры и новые их значения записываются в итоговую InnoDB-таблицу.
Запускается эта процедура редко, но может быть запущена из прикладной проги пользователем с правами админа.
Естественно, в такие моменты база не закрыта и другие пользователи могут выполнять операции, которые могут использовать/изменять данные из вышеназванной итоговой таблицы.
Хотелось бы на время выполнения этой хранимки запретить другим пользователям изменять вышеназванную итоговую табличку.

Транзакции не хочу использовать, т.к. для InnoDB они не дадут нужного эффекта - будут блокированы только те записи из итоговой таблицы, которые уже обработаны процедурой пересчета. А другие записи остануться доступны для изменения другим пользователям.

Если я правильно понял, то единственный выход - на клиенте запускать эту хранимку в одном SQL-запросе вместе с блокировкой:
Код: sql
1.
LOCK TABLES Table1 WRITE; CALL reCalcProc(); UNLOCK TABLES

Честно говоря, не нравится мне этот код - хотел бы все действия, необходимые для правильной и корректной обработки, "запаковать" в один "контейнер"!

Может кто чего посоветовать по этому поводу?

Спасибо!
...
Рейтинг: 0 / 0
Блокировка таблиц в хранимой процедуре?
    #38521224
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OlegROA,

select for update? Правда, я не уверен, будет ли он работать в процедурах. Вроде бы должен, только процедуру надо запускать в транзакции.
...
Рейтинг: 0 / 0
Блокировка таблиц в хранимой процедуре?
    #38521245
OlegROA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Насколько я понял из описания, меня "напрягают" две особенности этой конструкции:
- при "отваливании" сессии блокировка остается
- для блокировки всей таблицы нужно дать селект на все записи этой таблицы

Блин, сейчас еще раз перечитал про блокировку таблиц - нужно блокировать ВСЕ таблицы, которые так или иначе участвуют в процессе! Даже если во время блокировки я всего лишь читаю другие таблицы, их тоже нужно блокировать! Жесть!

Что-бы придумать для полной блокировки только одной таблицы!? Ну, или хотя бы для блокировки на запись?
...
Рейтинг: 0 / 0
Блокировка таблиц в хранимой процедуре?
    #38521252
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотя я что-то вообще не понял, в чём у вас затык.
Если вам надо один раз прочитать все таблицы, выполнить какой-то расчёт и один раз в них записать данные, вас repeatable read должен вполне устроить.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Блокировка таблиц в хранимой процедуре?
    #39261822
сделайте реплику для статистики. останавливайте ее перед выполнением хранимки, считайте что надо и запускайте вновь.
...
Рейтинг: 0 / 0
Блокировка таблиц в хранимой процедуре?
    #39262276
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglirOlegROA,

select for update? Правда, я не уверен, будет ли он работать в процедурах. Вроде бы должен, только процедуру надо запускать в транзакции.


будет.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Блокировка таблиц в хранимой процедуре?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]