Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.10.31;
Скачать: CL | DM;

Вниз

Delphi, MySQL и блокировка данных   Найти похожие ветки 

 
tanuha   (2002-10-08 11:24) [0]

Подскажите команду блокировки конкретной строки/записи в
таблице.
С БД одновременно работают и правят данные несколько пользователей. Ситуация: 1-й п. открыл документ и
вносит изменения (пока не сохраняя их), 2-й п. открыл
тотже документ и тоже правит. Кто-то из них сохранит
свои изменения раньше и в результате - оставшемуся
придется править все заново, поскольку контроль идет
только по вып-и update.


 
Дмитрий Баранов ©   (2002-10-08 13:04) [1]

Блокировки на запись в MySQL нет. "Кто-то из них сохранит
свои изменения раньше" просто означает, что его SQL-запрос update уйдет раньше. Блокировку можно эмулировать, имхо, только создав промежуточную прослойку (т.е. двузвенка не подходит).


 
tanuha   (2002-10-08 13:46) [2]

А можно поконкретнее о "промежуточной прослойке" ?


 
SergSuper   (2002-10-08 14:00) [3]

Собственно в серверах, которые поддерживают блокировки, они(блокировки) предназначены несколько для другого - для обеспечения целостности данных на уровне записей(если совсем грубо). То что Вы хотите - это не уже работа на уровне документов, т.е. на каком-то логическом уровне. Вам придётся самому вести таблицу, в которой отслеживать какие документы в каком состоянии находятся и уже на клиенткой части решать в соответствии с этими состояниями разрешать пользователю вносить исправления или нет.


 
fidget ©   (2002-10-08 14:45) [4]

ты можешь заблокировать отдельные записи в MySQL, только если исчпользуешь таблицы InnoDB

тогда просто SELECT .. FOR UPDATE/LOCK IN SHARE MODE


 
Дмитрий Баранов ©   (2002-10-08 14:50) [5]

> SergSuper (08.10.02 14:00)
Или так, тоже вариант.

> tanuha (08.10.02 13:46)
Обычная технология - пишется сервер, и только он напрямую работает с СУБД, а клиентские приложения общаются с сервером, предоставляющим какой=то интерфейс. В таком случае логика выносится на сервер, а не на клиента ( т.е. в данном случае он может решать - отдавать запись на редактирование второму клиенту или нет). А технологии для создания трехзвенок всяко разные есть, я, например, COM-MTS люблю.



 
Nikolay M. ©   (2002-10-08 17:57) [6]

Внесу свое скромное мнение - я в этой ситуации мог позволить себе завести два поля в редактируемой таблице (небольшой справочник): lock_user_name и lock_start_time. Понятно, что при открытии НД на редактирование в них записывались соответственно логин юзера и текущее время. При попытке отредактировать заблокированную запись выдавалось сообщение, что запись заблокирована таким-то пользователем, автоматическая разблокировка произойдет через эннадцать минут, пока запись открыта только на просмотр. + еще в нужном месте поставить через некоторое время автоматическую разблокировку, скажем через 20 минут, чтобы записи не повисали в readonly.


 
tanuha   (2002-10-09 13:41) [7]

Для меня наиболее приемлимы способы Nikolay"я и
SergSuper, поскольку понятно как реализовать.
Вариант fidget, тоже попробую, как только
разберусь с чем едят innoDB, сейчас у меня
тип табл. MyISAM, тот что по-умолчанию.

Всем спасибо.


 
Дед Макар   (2002-10-09 13:58) [8]

innodb-таблицы поддерживают транзакции и в последних версиях вроде бы еще есть foreign keys. Не уверен, что с помощью этих двух пунктов получится решить проблему.


 
fidget ©   (2002-10-09 15:24) [9]

почему?
например
если ты открываешь транзакцию и делаешь
select ... where [some condition] for update
т.е. выбираешь инфу по какой-то записи для редактирования

то до тех пор пока не произойдет COMMIT или ROLLBACK другой не сможет выбрать эту запись.

в mySQL"е есть еще такая функция как GET_LOCK(), я правда не очень поняла как она работает :(


 
Дед Макар   (2002-10-09 17:44) [10]


> fidget © (09.10.02 15:24)
select ... where [some condition] for update


не знаю, так не делал
возможно, что это и есть то, что нужно.



Страницы: 1 вся ветка

Текущий архив: 2002.10.31;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.01 c
1-101327
Treiber
2002-10-20 16:03
2002.10.31
Rasbivka stringa na reals


14-101488
Николай Быков
2002-10-11 18:25
2002.10.31
Простите мен за всё...


8-101386
Maxuz
2002-07-07 14:19
2002.10.31
TImage и фликеры :-(


3-101124
ПИТОН
2002-10-09 14:45
2002.10.31
TStringList в таблицу


6-101419
Enton
2002-08-31 23:07
2002.10.31
Как проверить существование файла в интернет