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

Вниз

UPDATE / INSERT в одном флаконе   Найти похожие ветки 

 
Добежал   (2008-10-27 11:01) [40]

>Делаю так:update or insert into Table1(ID,NAME) values(?,?)

а по какому условию тогда сработает update?!


 
Petr V. Abramov ©   (2008-10-27 11:07) [41]


> Игорь Шевченко ©   (30.09.08 17:39) [31]
>
> > Игорь, а что замена значения полей равно delete+insert?
>
>
>
> В большинстве случаев да. Потому что при замене значений
> полей заменяется запись целиком


в большинстве случаев нет.
на оракле по крайней мере


 
jack128_   (2008-10-27 11:18) [42]


> а по какому условию тогда сработает update?!

а ведь тебе даже ссылку дали на документацию...


 
Ega23 ©   (2008-10-27 11:43) [43]

В целом, Update выполняется как Delete + Insert.
Но, AFAIK, не вызываются триггеры на вставку-удаление


 
isasa ©   (2008-10-27 12:12) [44]

?

UPDATE ....
IF SQL%ROWCOUNT=0 THEN
   INSERT ...
END IF;


 
blackman ©   (2008-10-27 12:13) [45]

Всегда Replace и будет счастье :)


 
Petr V. Abramov ©   (2008-10-27 12:29) [46]


> isasa ©   (27.10.08 12:12) [44]

а пока выполнялся if, другая транзакция вставила запись...


 
Правильный$Вася   (2008-10-27 13:20) [47]


> update = DELETE + INSERT и по сути тоже

это если нет FOREIGN KEY, ссылающихся на эту запись, и не включен режим отложенной проверки ограничений


 
Ega23 ©   (2008-10-27 13:26) [48]


> это если нет FOREIGN KEY, ссылающихся на эту запись, и не
> включен режим отложенной проверки ограничений


Это без разницы. Наглядный пример - триггер на Update. Нет таблицы Updated, есть Inserted и Deleted.


 
Petr V. Abramov ©   (2008-10-27 13:36) [49]


>  Нет таблицы Updated, есть Inserted и Deleted.

я уверен, что это сделано просто для удобства разработчика, чтоб был доступ к старым и новым значениям, не перегружая t-sql, и к физической реализации update отношения не имеет


 
Ega23 ©   (2008-10-27 13:45) [50]


> я уверен, что это сделано просто для удобства разработчика,
>  чтоб был доступ к старым и новым значениям, не перегружая
> t-sql, и к физической реализации update отношения не имеет
>


Я предлагаю данный вопрос обсудить не тут а в подобающем месте. :)))


 
speller   (2008-10-27 14:14) [51]


> В теории это одно и тоже

а если делается апдейт не всех полей, а только одного? тоже удалять всю запись?


 
isasa ©   (2008-10-27 14:39) [52]

Petr V. Abramov ©   (27.10.08 12:29) [46]

а пока выполнялся if, другая транзакция вставила запись...


А кто мешает выполнять эту хранимую процедуру с клиента в одной транзакции?


 
isasa ©   (2008-10-27 14:42) [53]

ЗЫ. Как бы ты не извращался, а если два или более оператора, то придется делать так. Что бы не случилось так, как ты писал ....


 
Правильный$Вася   (2008-10-27 15:25) [54]


> Ega23 ©   (27.10.08 13:26) [48]
> > это если нет FOREIGN KEY, ссылающихся на эту запись, и  не
> > включен режим отложенной проверки ограничений
> Это без разницы. Наглядный пример - триггер на Update. Нет таблицы
> Updated, есть Inserted и Deleted.

1. это лишь способ представления
2. это частный подход одной из СУБД


 
Anatoly Podgoretsky ©   (2008-10-27 15:34) [55]

> speller  (27.10.2008 14:14:51)  [51]

Так оно так и делается, в транзакции, создается новая запись, а старая удаляется (помечается как свободная).


 
Anatoly Podgoretsky ©   (2008-10-27 15:35) [56]

> Правильный$Вася  (27.10.2008 15:25:54)  [54]

Ну и что, что частный случай, ну в других есть .old .new точно также две записи одновременно. Подумаешь по другому назвали.


 
Правильный$Вася   (2008-10-27 15:56) [57]


> ну в других есть .old .new точно также две записи одновременно.
>  Подумаешь по другому назвали.

это не 2 записи, это 2 состояния одной записи, при этом запись не пропадает (как в случае delete-insert), а переходит из одного состояния в другое


 
Petr V.Abramov   (2008-10-27 16:06) [58]


> isasa ©   (27.10.08 12:12) [44]
> ?
>
> UPDATE ....
> IF SQL%ROWCOUNT=0 THEN
>    INSERT ...
> END IF;



> isasa ©   (27.10.08 14:39) [52]
> Petr V. Abramov ©   (27.10.08 12:29) [46]
>
> а пока выполнялся if, другая транзакция вставила запись.
> ..
>
> А кто мешает выполнять эту хранимую процедуру с клиента
> в одной транзакции?


а какая разница, pl/sql-блок (пофиг, хранимый или анонимный) не в критической же секции выполняется, после update процесс запросто могут усыпить, и другая транзакция, пока он спит, полбазы переделает.
Вполне реальная ситуация, хоть и кажется, что вероятность маленькая, законы Мерфи имеют приоритет над законами боьших чисел.


 
Petr V.Abramov   (2008-10-27 16:07) [59]


> isasa ©   (27.10.08 14:42) [53]
> ЗЫ. Как бы ты не извращался, а если два или более оператора,
>  то придется делать так. Что бы не случилось так, как ты
> писал ....

не забыв че-нить заблокировать, что конкретно - по ситуации


 
Petr V.Abramov   (2008-10-27 16:08) [60]


> Ega23 ©   (27.10.08 13:45) [50]

ну вообще вопрос важный :)


 
Ega23 ©   (2008-10-27 16:18) [61]


> ну вообще вопрос важный :)


Главное - сирьйозный.


 
Ega23 ©   (2008-10-27 17:14) [62]


> ну вообще вопрос важный :)


Ну дык как, обсудим сегодня?


 
Правильный$Вася   (2008-10-27 17:25) [63]


> Ну дык как, обсудим сегодня?

че, прям так сразу с понедельника?
дождитесь пятницы, тогда обсуждение более продуктивным будет



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

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

Наверх




Память: 0.58 MB
Время: 0.012 c
3-1212520135
Белочка
2008-06-03 23:08
2008.12.28
Запрос в ADOQuery


15-1225349122
passlight
2008-10-30 09:45
2008.12.28
Следи за кредитом, будь осторожен...


15-1225275082
Petr V. Abramov
2008-10-29 13:11
2008.12.28
наигрались :)


15-1225436622
Виталий Глуниц
2008-10-31 10:03
2008.12.28
Интеграция любого приложения в объект TObject


15-1225052523
koha!
2008-10-26 23:22
2008.12.28
Консоль для супер маленьких