Текущий архив: 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