Обновление представлений в MySQL

Я создаю представление, чтобы показать пользователю его / ее данные, но я также хочу, чтобы пользователь мог вносить изменения в некоторые поля в этих представлениях. Отражены ли изменения, сделанные в представлении, в базовой таблице?

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

1 ответ

Решение

Как описано в разделе " Обновляемые и вставляемые представления":

Некоторые виды обновляются. То есть вы можете использовать их в таких заявлениях, как UPDATE, DELETE, или же INSERTобновить содержимое базовой таблицы. Чтобы представление можно было обновлять, между строками в представлении и строками в базовой таблице должна быть взаимно-однозначная связь. Существуют также некоторые другие конструкции, которые делают представление недоступным для обновления. Чтобы быть более конкретным, представление не может быть обновлено, если оно содержит любое из следующего:

  • Агрегатные функции (SUM(), MIN(), MAX(), COUNT(), и так далее)

  • DISTINCT

  • GROUP BY

  • HAVING

  • UNION или же UNION ALL

  • Подзапрос в списке выбора

  • Определенные объединения (см. Дополнительное обсуждение присоединения далее в этом разделе)

  • Необновляемый вид в FROM пункт

  • Подзапрос в WHERE пункт, который относится к таблице в FROM пункт

  • Относится только к буквальным значениям (в этом случае нет базовой таблицы для обновления)

  • Пользы ALGORITHM = TEMPTABLE (использование временной таблицы всегда делает представление недоступным для обновления)

  • Несколько ссылок на любой столбец базовой таблицы.

[ deletia ]

Иногда представление для нескольких таблиц может быть обновляемым, при условии, что оно может быть обработано с помощью MERGE алгоритм. Чтобы это работало, представление должно использовать внутреннее соединение (не внешнее соединение или UNION). Кроме того, только одна таблица в определении представления может быть обновлена, поэтому SET Предложение должно называть только столбцы из одной из таблиц в представлении. Просмотры, которые используют UNION ALL не разрешены, даже если они могут быть теоретически обновляемыми, потому что реализация использует временные таблицы для их обработки.

Другие вопросы по тегам