Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Обращение записи при ее обновлении  (Прочитано 11698 раз)
0 Пользователей и 1 Гость смотрят эту тему.
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« : 20-08-2005 14:07 » 

Я в базах данных новичек и вообще практически с ними не сталкиваюсь, но иногда приходится. Так что заранее простите за сверх делитантские вопросы.
Итак вопрос. Есть база MySQL. В определенный момент в ней происходит обновление полей (т.е. выполняется update ... set ...). Что будет происходить, если в момент обновления записи к примеру с id=5 будет происходить запрос на чтение? Нужно-ли как-то разграничивать доступ в данном случае, т.е. запрещать обращение к этой записи или все это делается MySQL сервером автоматически? То же самое и про insert.
Заранее спасибо за ответ.
Записан

ещё один вопрос ...
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 20-08-2005 14:32 » 

Это уже не твоя проблема
Это проблема самой СУБД

т.е. - автоматически - тебе об этом думать низзя

Субд само разберется с запросами
Но чтоб это понять это нужно самому ручками проверить
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 20-08-2005 15:14 » 

Еще вот такой вопрос возник.
Производится обновление базы, при этом происходит последовательный просмотр записей со следующим условием, если есть id равный номеру нужной записи (id является primary key) то я провожу изменение всей строки, т.е.
 Update table set ... where id=<значение>, если же не существует в поле id такого значения, то я произвожу добавление сироки, т.е.
insert into table (id,...) values (<очередное значение>,...).
Но меня мучает такое сомнение, если я произвожу update всей строки, то может случится такое, что я буду изменять запись в которй до этого не хранилось никакое значение (кажется при этом NULL записывается). Насколько я знаю, в этом случае в данном поле изменений не произойдет. Для того, чтобы изменения были внесены необходимо писать insert. Я прав? Если да, то я вижу 2 пути решения:
1) проверять каждую запись в строке
2)либо проводить не update, а вначале удалять строку, а потом заносить строку посредством insert.
Хотелось бы узнать какой из методов более предпочителен.
Записан

ещё один вопрос ...
Oldy
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 20-08-2005 19:12 » 

Бррр.
Даже если при Update строк = NULL, физически будет происходить Insert, то все равно это выгоднее чем найти, удалить, вставить. При выполнении вышеперечисленной последовательности серверу придется перестраивать индексы (primary key) после удаления и после вставки, что приведет к дополнительным "накладным" расходам. (IMHO).
« Последнее редактирование: 20-08-2005 19:17 от Oldy » Записан

С уважением, Oldy.
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #4 : 22-08-2005 05:47 » 

Не пудри себе мозги
Еще раз повторю
С этим раберется сама СУБД
Если тебе конкретно интересует как - смотри первоисточникии.
Разные СУБД и работают по-разному.
Делаешь update когда идет select - ничего страшного.
Несколько вариантов
    Lock на таблицу, тогда select только после снятия lock
   Некий спул для select, тогда свободно делаешь update
   Что-то наподобие спула для update, тогда select из таблицы выберет еще незаапдетенные данные
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 22-08-2005 10:41 » 

Спасибо, с вышеизложенным разобрался, во многом был не прав Жаль. Еще такой вопрос. БД-MySQL. Есть-ли возможность провести полное копирование одной БД в другую с полным сохранением имен таблиц, полей и прочее. Желательно как-нибудь по средством одной команды (что-то типа copy(<name one BD>,<name two BD>)). Есть-ли вообще такая возможность или все это придется проделывать самому (т.е. производить чтение из одной базы и поизводить запитсь в другую).
Записан

ещё один вопрос ...
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #6 : 22-08-2005 16:44 » 

зачем же?
ты что-нибудь слышал о dump? об import/export

и в общем-то делается это одной командой.
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #7 : 22-08-2005 16:50 » 

В phpSQLAdmink'e я видел кнопку экспорт, там можно экспортировать структуру, данный, структуру и данные, но как это дело вызвать посредством SQL запроса. На вопрос "зачем" ответ такой, обновление базы происходит один раз в сутки, хотелось бы что весь процесс обновления сначала происходил бы с временной базой, а затем всю временную базу сразу слить на основную.
p.s.:
Цитата
ты что-нибудь слышал о dump?
Нет, не слышал.
« Последнее редактирование: 20-12-2007 20:27 от Алексей1153++ » Записан

ещё один вопрос ...
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #8 : 23-08-2005 15:25 » 

Ну и... Что насчет SQL запроса?
Записан

ещё один вопрос ...
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #9 : 24-08-2005 15:54 » 

Про dump узнал. Это архивирование и к моему вопросу не имеет никакого отношение. Вот export/import быть может. Подскажите, как же все-таки запустить этот импорт/экспорт по средствам запросов SQL.
Записан

ещё один вопрос ...
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines