Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Базы Данных > REPLACE = ???


Автор: Wiedzmin 9.7.2006, 10:24
Запрос REPLACE еквивалентен: 
1) DELETE, а потом INSERT 
или 
2) SELECT (проверяем есть ли такая строчка), а потом UPDATE по всем полям
или 
3) Это вообще уникальная команда, выполняет запрос быстрее двух предыдущих )

? 

Автор: Mephisto 10.7.2006, 08:58
Цитата(Wiedzmin @  9.7.2006,  09:24 Найти цитируемый пост)
SELECT (проверяем есть ли такая строчка), а потом UPDATE по всем полям

Update ... set ... where...
Чем не устраивает?  Просто дальше разрабатывать алгоритм замены необходимо. А что, есть проблемы с replace? 

Автор: Wiedzmin 10.7.2006, 09:16
Цитата(Mephisto @  10.7.2006,  08:58 Найти цитируемый пост)
Update ... set ... where...

А если строчка еще не вставлена и нечего UPDATE по указанным WHERE. 

Т.е. тут либо 
SELECT ... ; 
if ( есть строки ) UPDATE ...; else INSERT ...;

Либо сразу один REPLACE 

Автор: Bikutoru 10.7.2006, 10:30
Цитата(Wiedzmin @  10.7.2006,  10:16 Найти цитируемый пост)
А если строчка еще не вставлена и нечего UPDATE по указанным WHERE. 

Т.е. тут либо 
SELECT ... ; 
if ( есть строки ) UPDATE ...; else INSERT ...;

Либо сразу один REPLACE  


Скорее всего REPLACE. Правда, если в таблице есть поле AUTO_INCREMENT, чье значение потом потребуется, то с REPLACE могут возникнуть проблемы - в таком случае лучше использовать 

Цитата(Wiedzmin @  10.7.2006,  10:16 Найти цитируемый пост)
SELECT ... ; 
if ( есть строки ) UPDATE ...; else INSERT ...;

 

Автор: Wiedzmin 10.7.2006, 18:57
Без автоинкримента ). Уникальный индекс - один.  

Автор: Mephisto 10.7.2006, 20:21
Цитата(Wiedzmin @  10.7.2006,  08:16 Найти цитируемый пост)
А если строчка еще не вставлена и нечего UPDATE по указанным WHERE. 

А чем тебе тогда replace поможет?  smile 
Он работает как и update на созданных записях. Разве что в тригере на инсерт может обработать новую.  

Автор: Wiedzmin 10.7.2006, 20:35
Mephisto, не, REPLACE это как раз аналог INSERT, который не выдает ошибку, если попалось уже существующее уникальное значение по какому-то полю, а заменяет 

Автор: Bikutoru 11.7.2006, 09:16
Цитата(Wiedzmin @  10.7.2006,  19:57 Найти цитируемый пост)
Без автоинкримента ). Уникальный индекс - один.

Тогда делай REPLACE, если тебя не смущает, что в твоем скрипте будет неизвестно, овномлетсяли какая-то запись или вставляется новая
 

Автор: Mephisto 11.7.2006, 09:24
Цитата(Wiedzmin @  10.7.2006,  19:35 Найти цитируемый пост)
Mephisto, не, REPLACE это как раз аналог INSERT, который не выдает ошибку, 

Покажи че ты пишешь!  smile  

Автор: Wiedzmin 11.7.2006, 09:57
Цитата(Bikutoru @  11.7.2006,  09:16 Найти цитируемый пост)
Тогда делай REPLACE, если тебя не смущает, что в твоем скрипте будет неизвестно, овномлетсяли какая-то запись или вставляется новая


Просто там разные возможности оптимизации если я знаю, что была запись или не было ее )). Если один РЕПЛЕЙС будет оптимальнее этого всего, то наверно его надо ставить ). Вот я и спрашиваю какие действия внутренне делает МуСКЛ и как можно оценить РЕПЛЕЙС smile)

Цитата(Mephisto @  11.7.2006,  09:24 Найти цитируемый пост)
Покажи че ты пишешь!  smile   

Я пишу отметку топиков прочитанными/непрочитанными для форума, где прочтения хранятся в БД smile). 

Правда сейчас уже над немного другой структурой думаю 

Автор: Mephisto 11.7.2006, 15:09
Меня интересует сама строка запроса. Насколько я помню в мускуле replace немного в других целях используеться. 

Автор: Wiedzmin 11.7.2006, 16:18
REPLACE table VALUES (a,b,c,d)

Первичный ключ по полям (a,b,c) 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)