Обновление представлений в 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
не разрешены, даже если они могут быть теоретически обновляемыми, потому что реализация использует временные таблицы для их обработки.