powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / нужно ли блокировать таблицу перед ее изменением?
9 сообщений из 9, страница 1 из 1
нужно ли блокировать таблицу перед ее изменением?
    #33385556
unicornmirage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте.
Скажите пожалуйста, вот я вношу изменения в таблицу, используя preparedStatement для этого, (СУБД MySQL), нужно ли перед вызовом метода preparedStatement.executeUpdate(); посылать запрос "LOCK TABLES `mytable` WRITE;"
и после выполнения preparedStatement.executeUpdate(); разблокировать таблицу с помощью запроса "UNLOCK TABLES;" ?
...
Рейтинг: 0 / 0
нужно ли блокировать таблицу перед ее изменением?
    #33385582
Фотография johanna
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
обязательно, если больше одного пользователя. :)
если изменения только из 1 программы производятся то можно просто метод, который это делает синхронизировать (synchronized).
...
Рейтинг: 0 / 0
нужно ли блокировать таблицу перед ее изменением?
    #33385667
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
обязательно, если больше одного пользователя. :)

нушто в mySQL все так плохо? :)
...
Рейтинг: 0 / 0
нужно ли блокировать таблицу перед ее изменением?
    #33385692
unicornmirage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в моем случае многопользовательский режим (одновременно обращаются к базе около 10 пользователей или больше), причем одновременно кто то может читать, а ктото может писать, а еще кто то может в это время вообще удалять целые поддеревья базы. пока конфликтов не было обнаружено, но возникло небольшое сомнение..
Насчет синхронизации метода - я сомневаюсь что так правильно - ведь здесь речь идет о JDBC, у него свои методы внутренние уже есть.
так скажите точно - нужно делать или не нужно блокировку, которую я указал в самом начале темы? да или нет?
...
Рейтинг: 0 / 0
нужно ли блокировать таблицу перед ее изменением?
    #33385713
Alexey Turn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вобщем можно явно блокировать, но лучше пусть это делает сервер.
Наскока я знаю - по умолчанию этим занимается сам сервер, но при желании можно его так настроить чтобы лочить таблицы самому.
...
Рейтинг: 0 / 0
нужно ли блокировать таблицу перед ее изменением?
    #33385718
Alexey Turn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кроме блокировок по умолчанию можно использовать модификаторы.

INSERT [LOW_PRIORITY | DELAYED] [IGNORE]
[INTO] tbl_name [(col_name,...)]
VALUES (expression,...),(...),...
or INSERT [LOW_PRIORITY | DELAYED] [IGNORE]
[INTO] tbl_name [(col_name,...)]
SELECT ...
or INSERT [LOW_PRIORITY | DELAYED] [IGNORE]
[INTO] tbl_name
SET col_name=expression, col_name=expression, ...

LOW_PRIORITY, DELAYED - это модификаторы планирования.

Например LOW_PRIORITY - низкий приоритет записи. Если идет чтение из таблицы, запись будет ждать пока чтение не кончится. Если во время ожидания придет ещо одно чтение, оно вклинится между первым чтением и ждущей записью итд.

mysql.ru
...
Рейтинг: 0 / 0
нужно ли блокировать таблицу перед ее изменением?
    #33385817
М.Голованов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блокировка в многопользовательском режиме - очень плохой подход. Используйте либо транзакции, либо optimistic locking. В последнем случае в таблицу добавляется поле version int NOT NULL DEFAULT '0', перед обновлением проверяется, какая версия в базе и какую версию вы "взяли" на обновление. Несовпадение означает, что кто-то успел выполнить свое обновление и имеет место коллизия. Совпадение означает, что все ОК и можно обновлять.
...
Рейтинг: 0 / 0
нужно ли блокировать таблицу перед ее изменением?
    #33386149
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
М.ГоловановБлокировка в многопользовательском режиме - очень плохой подход. Используйте либо транзакции, либо optimistic locking. В последнем случае в таблицу добавляется поле version int NOT NULL DEFAULT '0', перед обновлением проверяется, какая версия в базе и какую версию вы "взяли" на обновление. Несовпадение означает, что кто-то успел выполнить свое обновление и имеет место коллизия. Совпадение означает, что все ОК и можно обновлять.
:-) топикстартеру:
не стоит думать, что во всех субд блокировки - это действительно плохой подход (очень понятно об этом написано у кайта, по моему в первой главе).
предложенный вариант реализации оптимистичного блокирования выглядит крайне странным. я думал что это несколько другое (если судить по ораклу). кстати, как разрулить одновременный доступ к этой колонке? :)
...
Рейтинг: 0 / 0
нужно ли блокировать таблицу перед ее изменением?
    #33387263
Фотография Andron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как мне кажется, надо почитать про уровни изоляции пользователей и выяснить какие из уровней обеспечиваются конкретной СУБД. Вобщем RTFM
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / нужно ли блокировать таблицу перед ее изменением?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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