Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / REPLACE и UPDATE - В чем разница / 17 сообщений из 17, страница 1 из 1
05.11.2003, 20:07
    #32316610
Newb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
REPLACE и UPDATE - В чем разница
Господа вопрос мучает, помогите разрешить.
Две записи в чем между ними разница:

SELECT Cursor1
SET ORDER TO Pole1
=SEEK(Peremennaia1)
REPLACE Pole2 WITH Pole2+Peremennaia2

UPDATE Cursosr1 SET Pole2+Peremennaia2
WHERE Pole1=Peremennaia1

На первый взгляд делают они одно и тоже. Но возможно что я что-то не понимаю. Подскажите пожалуйста.

Спасибо
...
Рейтинг: 0 / 0
05.11.2003, 20:15
    #32316619
karly™
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
REPLACE и UPDATE - В чем разница
Разница в том, что в первом случае будет изменена только текущая строка
(первая, у которой Pole1=Peremennaia1). А во втором будут измененты все строки ,
у которых Pole1=Peremennaia1

Вот между строками
REPLACE Pole2 WITH Pole2+Peremennaia2 For Pole1=Peremennaia1 in Cursor1

и
UPDATE Cursosr1 SET Pole2+Peremennaia2 WHERE Pole1=Peremennaia1

действительно нет никакой разницы :) Ну разве что вторая более понятна
для привыкших к синтаксису SQL
...
Рейтинг: 0 / 0
05.11.2003, 20:20
    #32316621
karly™
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
REPLACE и UPDATE - В чем разница
Упс... Одна неточность.

Команда Replace ... For ... блокирует заголовок таблицы,
т.е. пока она выполняется, другие пользователи не могут вносить изменения.

А вот Update ... Where ... по очереди блокирует только изменяемые строки,
оставляя таблицу доступной для других пользователей.

Т.е. первая команда будет работать чуть быстрее при монопольном доступе,
а вторую лучше применять при совместной работе.
...
Рейтинг: 0 / 0
06.11.2003, 10:54
    #32316954
Crip
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
REPLACE и UPDATE - В чем разница
Replace блокирует заголовок???
Давно не писал под файл-сервер, но вроде replace вообще ничего не блокирует...
...
Рейтинг: 0 / 0
06.11.2003, 12:04
    #32317105
andrew_Pr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
REPLACE и UPDATE - В чем разница
HELP locking, record vs. table
Commands that Automatically Lock Records and Tables

Command | Scope of lock
......
REPLACE of more than one record | Entire table and all files from aliased fields
......
UPDATE – SQL | Entire table
...
Рейтинг: 0 / 0
06.11.2003, 12:21
    #32317135
Crip
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
REPLACE и UPDATE - В чем разница
HELP UPDATE
Unlike REPLACE, UPDATE - SQL uses record locking when updating multiple records in a table opened for shared access. This reduces record contention in multiuser situations, but may reduce performance.
...
Рейтинг: 0 / 0
06.11.2003, 13:21
    #32317224
andrew_Pr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
REPLACE и UPDATE - В чем разница
to Crip
Знаю. Решил подкрепить свои знания ссылкой на официальный источник. Полез в HELP и с удивлением для себя обнаружил UPDATE – SQL | Scope of lock = Entire table 8О
MicroSoft, однако. Места надо знать, где читать, а где не читать.
Спасибо, Crip, успокоил.
...
Рейтинг: 0 / 0
06.11.2003, 13:38
    #32317258
Newb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
REPLACE и UPDATE - В чем разница
Упс....
А что же тогда значит REPLACE ALL ?
Я так думал что она как раз и меняет все записи соответствующие условию
...
Рейтинг: 0 / 0
06.11.2003, 13:43
    #32317278
Crip
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
REPLACE и UPDATE - В чем разница
replace all и replace for эквиваленты...
...
Рейтинг: 0 / 0
06.11.2003, 13:44
    #32317281
Crip
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
REPLACE и UPDATE - В чем разница
ой опечатался...
replace all for и replace for эквиваленты...
...
Рейтинг: 0 / 0
18.03.2004, 10:15
    #32446603
REPLACE и UPDATE - В чем разница
Задурили голову, так UPDATE-SQL Scope of lock только заголовок таблицы?
...
Рейтинг: 0 / 0
18.03.2004, 10:24
    #32446638
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
REPLACE и UPDATE - В чем разница
Нет.

UPDATE-SQL блокирует только те записи, которые собственно и модифицируются.

Это опечатка документации. Тот случай, когда не следует верить написанному MicroSoft.
...
Рейтинг: 0 / 0
18.03.2004, 10:43
    #32446693
REPLACE и UPDATE - В чем разница
И блокирует их по одной изменяемой (блокирует одну, производит обновление, разблокирует, переходит к следующей )?
...
Рейтинг: 0 / 0
18.03.2004, 11:19
    #32446782
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
REPLACE и UPDATE - В чем разница
Не проверял. Не представляю, как это можно проверить простым способом.

Теоретически, должно быть как ты описал. Но на практике, я не вижу особой разницы будет ли снята блокировка записи в момент перехода к следующей или по окончании модификации всех записей. Ведь все равно подобные команды желательно окружать транзакцией, а транзакция держит все созданные блокировки до окончания транзакции.
...
Рейтинг: 0 / 0
19.03.2004, 09:49
    #32448518
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
REPLACE и UPDATE - В чем разница
Удалось проверить.

Действительно, команда UPDATE-SQL блокирует только одну изменяемую запись и только на время внесения изменений. Т.е. при переходе на другую запись блокировка с предыдущей снимается.
...
Рейтинг: 0 / 0
23.03.2004, 19:32
    #32453836
guest
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
REPLACE и UPDATE - В чем разница
Из академического интереса - и как удалось проверить - через триггеры?
...
Рейтинг: 0 / 0
23.03.2004, 19:54
    #32453872
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
REPLACE и UPDATE - В чем разница
Нет. В FoxPro в любой команде допустимо писать пользовательскую функцию. Ну, я и написал.

UPDATE MyTab SET Field=Field+MyFunc() WHERE ID<=3

FUNCTION MyFunc
?IsRLocked(1,"MyTab")
RETURN ''

В таблице MyTab есть ID со значениями меньше 3, причем в это число входит запись с Recno()=1. В результате я получил список значений:

.T.
.F.

Т.е. в момент внесения изменений во вторую запись, первая запись уже НЕ заблокирована.
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / REPLACE и UPDATE - В чем разница / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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