PostgreSQL — создание обновляемых представлений
Представление может представлять подмножество реальной таблицы, выбирая определенные столбцы или определенные строки из обычной таблицы. Мы можем использовать их для ограничения доступа к исходной таблице, чтобы пользователи могли видеть только часть таблицы. Таблица, из которой создается представление, называется базовой таблицей. Представления могут быть обновляемыми и необновляемыми. Вы можете использовать обновляемые представления в ситуациях, когда вы хотите, чтобы определенные пользователи обновляли определенные столбцы определенных таблиц. Любое представление является обновляемым, если оно соответствует следующим требованиям:
- В предложении FROM определяющего запроса представления должна быть только одна запись.
- Список выбора не должен содержать каких-либо агрегатных функций, таких как SUM, MIN, MAX и т. д.
- Операторы GROUP BY, HAVING, LIMIT, OFFSET, DISTINCT, WITH, UNION, INTERSECT и EXCEPT нельзя использовать в запросе в представлении.
Это было бы более понятно с помощью примера. Давайте посмотрим на следующий пример. Ниже приведена таблица под названием «пример», в которой содержатся некоторые основные данные о сотрудниках: +
Синтаксис для создания обновляемого представления
CREATE OR REPLACE VIEW view_name AS SELECT column1, column2..... FROM table_name WHERE [condition];
Создание обновляемого представления
Теперь мы можем создать представление из исходной таблицы «пример». Представление может занимать один или несколько столбцов в списке выбора в зависимости от того, какой доступ вы хотите предоставить своим пользователям. Давайте создадим обновляемое представление «my_view» с тремя столбцами: идентификатором, именем и отделом соответственно.
CREATE OR REPLACE VIEW my_view AS SELECT id,name,dept from example WHERE dept="Sales"; Output: CREATE VIEW Query returned successfully in 220 msec.
Запрос результатов
Мы можем просто увидеть результаты созданного представления, просто выполнив запрос SELECT следующим образом:
SELECT * from my_view;
Выход :
Поскольку была одна строка с отделом «Продажи», мы получили только одну строку в результатах.
Вставка в созданный вид
Теперь давайте попробуем выполнить операцию INSERT в созданном представлении, используя также следующий синтаксис и пример.
SYNTAX: INSERT INTO view_name (column1,column2,...columnN) VALUES(Val1, val2...valN); EXAMPLE: INSERT INTO my_view (id,name,dept)VALUES(106,"Johnson","Health");
Теперь, если мы запустим запрос SELECT, в созданном представлении не будет наблюдаться никаких изменений, и это связано с тем, что новый отдел, который мы добавили при вставке значения, — «Здоровье», но при создании нашего представления мы упомянули «Продажи». в предложении WHERE, поэтому в фильтре не будет наблюдаться никаких изменений. Однако мы можем увидеть изменение (добавлена новая строка) в исходной таблице.
Итак, теперь, если мы запустим запрос как «SELECT * FROM example», вывод будет следующим:
Здесь можно наблюдать два основных изменения: значение «Null» в последнем столбце таблицы и общее количество строк, увеличенное на единицу. Это показывает, что мы успешно создали обновляемое представление. Теперь давайте посмотрим, как мы можем сделать некоторые обновления в самом представлении.
Обновление созданного вида
Мы также можем обновить созданное представление, используя следующий синтаксис:
SYNTAX: UPDATE view_name SET column = "New Value"; EXAMPLE: UPDATE my_view SET dept = "Health"; OUTPUT: UPDATE VIEW Query returned successfully in 180 msec.
Итак, теперь, если мы запустим запрос как «SELECT * FROM example», вывод будет следующим:
Основные изменения, которые можно наблюдать здесь: строка, которая ранее содержала значение отдела как «Продажи», была обновлена со значением отдела как «Здоровье». Также изменен порядок строки 2, теперь она добавлена последней.
Вот как мы можем создавать и выполнять операции с обновляемым представлением.