powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / INSERT and UPDATE
11 сообщений из 11, страница 1 из 1
INSERT and UPDATE
    #32895041
_grifon_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Такой вопрос: есть таблица. С некоторой периодичностью данные в этой таблице должны обновляться. При этом могут появиться дополнительные строки, т.е. использование только оператора UPDATE не допустимо.
Подскажите как правильно реализовать эту систему?

1. SELECT * FROM table 1 WHERE col='значение'
2. проверка на то, успешна была выборка или нет
3. в зависимости от проверки выполнять или INSERT или UPDATE

Или есть все-таки более рациональные варианты?
...
Рейтинг: 0 / 0
INSERT and UPDATE
    #32895054
tru55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как я понимаю, зависит от БД. Например, в Oracle 8 выглядело так (PL/SQL)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT COUNT(*)
INTO cnt1
FROM table1
WHERE col = <val1>;

if cnt1 =  0  then
  INSERT ...
else
  UPDATE ...
end if;

В Oracle 9 появилась команда MERGE, которая делает это с пом. только SQL
...
Рейтинг: 0 / 0
INSERT and UPDATE
    #32895079
Фотография Dogen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_grifon_Такой вопрос: есть таблица. С некоторой периодичностью данные в этой таблице должны обновляться. При этом могут появиться дополнительные строки, т.е. использование только оператора UPDATE не допустимо.
Подскажите как правильно реализовать эту систему?

1. SELECT * FROM table 1 WHERE col='значение'
2. проверка на то, успешна была выборка или нет
3. в зависимости от проверки выполнять или INSERT или UPDATE

Или есть все-таки более рациональные варианты?
А что такого сложного. Обычно эти insert и update довольно сильно отличаются.
...
Рейтинг: 0 / 0
INSERT and UPDATE
    #32895091
_grifon_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, прошу прощения забыл сказать про БД: используется MySQL.
...
Рейтинг: 0 / 0
INSERT and UPDATE
    #32895107
_grifon_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dogen
А что такого сложного. Обычно эти insert и update довольно сильно отличаются.

Абсолютно ничего сложного нет. Просто хочется узнать единственный ли способ обновления таблицы, который я написал, или все-таки существуют ещё.
...
Рейтинг: 0 / 0
INSERT and UPDATE
    #32895121
Фотография Dogen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_grifon_ Dogen
А что такого сложного. Обычно эти insert и update довольно сильно отличаются.

Абсолютно ничего сложного нет. Просто хочется узнать единственный ли способ обновления таблицы, который я написал, или все-таки существуют ещё.
Не единственный.
Используйте только INSERT, а активную версию записи выбирайте по дате или еще как-нибудь.
...
Рейтинг: 0 / 0
INSERT and UPDATE
    #32895161
Фотография Va1entin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IMHO первоначальный - самый оптимальный вариант.
...
Рейтинг: 0 / 0
INSERT and UPDATE
    #32895171
_grifon_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dogen
Не единственный.
Используйте только INSERT, а активную версию записи выбирайте по дате или еще как-нибудь.

Я думаю засорять таблицу лишними записями не имеет смысла. Но спасибо за вариант :)
...
Рейтинг: 0 / 0
INSERT and UPDATE
    #32895184
Фотография Александр Гoлдун
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tru55Как я понимаю, зависит от БД. Например, в Oracle 8 выглядело так
Зависит. В ASA можно сделать так:
Код: plaintext
1.
2.
3.
INSERT INTO ....
  ON EXISTING UPDATE
VALUES(...)
...
Рейтинг: 0 / 0
INSERT and UPDATE
    #32895192
Фотография Dogen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_grifon_ Dogen
Не единственный.
Используйте только INSERT, а активную версию записи выбирайте по дате или еще как-нибудь.

Я думаю засорять таблицу лишними записями не имеет смысла. Но спасибо за вариант :)
Я не предлагаю хранить лишнее. Если Вам не нужно хранить версии записей, используйте Ваш вариант.
...
Рейтинг: 0 / 0
INSERT and UPDATE
    #32895700
Фотография PVP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Допустим, что новые записи находятся в TMP, а старые в TABLE. Имеется ключ, определяющий однозначную связь между записью из TMP и TABLE->Key.
Имеется признак в TABLE, который ограничивает множество записей, которому соответствует набор в TMP.

Если время не критично, то проще всего удалить сначала из Table те записи, множество которых относится к обновлению, и затем вставить из TMP в TABLE. Это также исключает возможность остаться старой записи, которая была удалена (в этом случае только Insert или Update недостаточно.

Если критично время, тогда следует позаботиться о том, что бы не было лишней работы для перестрйки индексов и записей в журнал транзакций. Для индексов - не делать Update для тех записей, в которых не поменялись ключевые поля, т.е. входящие в индексы. Для журнала транзакций - не делать Update для тех записей, которые вообще не поменялись.

В целом можно это сделать за несколько шагов
- Отметить в TMP полностью сопадающие записи (отметка в TMP не занимает время)
- Обновить записи с совпадающими ключевыми полями (индексы не меняются, время на запись в журнал транзакций)
- удалить из TABLE записи, для которых соответствующих ключей в TMP
- Вставить из TMP в TABLE не использованные записи из TMP
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / INSERT and UPDATE
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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