Подтвердить что ты не робот

Является ли представление в базе данных обновляемым?

Можете ли вы обновить представление в базе данных? Если да, то как? Если нет, почему бы и нет?

4b9b3361

Ответ 1

Фактический ответ "это зависит", нет абсолютов.

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

Однако его также можно обмануть... в MS SQL Server и Oracle (чтобы взять только два примера) у вас могут быть триггеры, которые срабатывают при попытке вставить или обновить представление, чтобы вы могли сделать что-то, что сервер не делает 't думаю, что обновляется во что-то, что есть - обычно потому, что вы знаете, что сервер не может легко вывести из схемы.

Ответ 2

Правильный ответ: "Это зависит". Например, вы не можете обновить столбец агрегата в представлении. Для представлений Oracle вы можете использовать Google для "обновляемого представления соединения" для некоторых примеров того, когда вы можете и не можете обновить представление.

Ответ 3

PostgreSQL имеет ПРАВИЛА для создания обновляемых VIEW. Проверьте примеры в руководстве, чтобы узнать, как их использовать.

Ps. В PostgreSQL VIEW - это правило, правило выбора.

Ответ 4

В прошлом невозможно было обновить какие-либо представления. Основная цель представления - посмотреть на данные, отсюда и название. Его также можно было бы назвать сохраненным запросом.

Сегодня многие модули баз данных поддерживают обновление представлений. Он связан с ограничениями, некоторые обновления практически невозможны (например, вычисленные столбцы, группа и т.д.).

Ответ 5

Да, они обновляемые, но не всегда. Представления могут быть обновлены в соответствии со следующими:

  • Если представление состоит из первичного ключа таблицы, на основе которой было создано представление.

  • Если представление определено на основе одной и только одной таблицы.

  • Если представление не было определено с использованием групп и агрегатных функций.
  • Если представление не имеет какого-либо отдельного предложения в своем определении.
  • Если представление, которое предполагается обновить, основано на другом представлении, последнее должно быть обновляемым.
  • Если в определении представления нет подзапросов.

Ответ 6

Существует два подхода:

  • INSTEAD OF trigger, который в основном переносит проблему на пользователя. Вы пишете процедурный код, который выполняет эту работу. Конечно, никаких гарантий относительно правильности, согласованности и т.д. С точки зрения двигателя РСУБД триггер, который удаляет все из базовых таблиц, независимо от того, какое обновление сделано в представлении, отлично.

  • Гораздо более амбициозным является просмотр обновлений, обработанный исключительно механизмом RDBMS. Здесь не так много прогресса: мягко говоря, если у вас есть хорошие идеи, то вы можете развернуть кандидатскую диссертацию. На практике ваша любимая RDBMS может позволить некоторые ограничения для просмотра объявлений на хоккее; проверьте руководство:-)

Ответ 7

Да, они - синтаксис совпадает с обновлением таблицы

Update MyView
Set Col1 = "Testing"
Where Col2 = 3
Go

Существует несколько условий для создания представления, которое может быть обновлено. Их можно найти здесь

EDIT:

Я должен добавить, что он основан на MS SQL

Ответ 8

Да, вы можете, но посмотрите CREATE VIEW (Transact-SQL) и посмотрите раздел Обновляемые представления

Ответ 10

Когда в SQL Server создается представление, метаданные для столбцов таблицы ссылок (название столбца и порядковая позиция) сохраняются в базе данных. Любые изменения в ссылочной базовой таблице (таблицах) (переупорядочение столбцов, добавление новых столбцов и т.д.) Не будут отображаться в представлении до тех пор, пока не появится представление:

• Изменено с помощью оператора ALTER VIEW • Воспроизводится с помощью предложений DROP VIEW/CREATE VIEW • Обновлен с использованием системной хранимой процедуры sp_refreshview

Ответ 11

Да, используя INSTEAD OF.

Ответ 12

Как правило, мы не обновляем представление. Представление написано для извлечения данных из различных таблиц на основе объединений и того, где поставлены условия.

Представление - это просто логика, которая предоставляет желаемый набор данных при его вызове.

Но не уверен, по какому сценарию нужно обновить представление.