4.8 视图
6.8.1 什么是视图
视图就是由查询语句定义的虚拟表
使用视图一般出于几个原因:
可使复杂的查询易于理解和使用
安全原因,视图可以隐藏一些数据,如在一张用户表中,可以通过定义视图把密码等敏感字段去掉
把一些函数返回的结果映射成视图
数据库中提供的视图默认也是只读的,但也可以使用规则系统做出可更新的视图
6.8.2 创建视图
语法:
CREATE [ OR REPLACE ] [ TEMP | TEMPORARY ] VIEW name [ ( column_name [, ...] ) ] AS query示例视图
CREATE VIEW 视图名 AS 查询语句;创建一个临时视图,session结束就消失:
CREATE TEMP VIEW 视图名 AS 查询语句;创建视图定义别名
CREATE VIEW 视图名(别名1, 别名2, 别名3, ...) AS 查询语句;注意:查询语句中的结果字段名需要与视图中定义的别名数量对应上
6.8.3 可更新视图
设置视图字段允许更新/删除规则
CREATE RULE 规则名 AS ON UPDATE TO 视图名 DO INSTEAD UPDATE 表名 SET 字段名 = NEW.字段名;备注:规则名规范:
vw_表名_操作名通过触发器实现视图更新
CREATE OR REPLACE FUNCTION vw_users_insert_trigger() RETURNS TRIGGER AS $$ BEGIN INSERT INTO users VALUES(NEW.id, NEW.user_name,'111111', NEW.user_email, NEW.user_mark); RETURN NULL; END; $$ LANGUAGE plpgsql; CREATE OR REPLACE FUNCTION vw_users_update_trigger() RETURNS TRIGGER AS $$ BEGIN UPDATE users SET user_email = NEW.user_email WHERE id= NEW.id; RETURN NULL; END; $$ LANGUAGE plpgsql; CREATE OR REPLACE FUNCTION vw_users_delete_trigger() RETURNS TRIGGER AS $$ BEGIN DELETE FROM users WHERE id= NEW.id; RETURN NULL; END; $$ LANGUAGE plpgsql; CREATE TRIGGER insert_vw_users_trigger INSTEAD OF INSERT ON vw_users FOR EACH ROW EXECUTE PROCEDURE vw_users_insert_trigger(); CREATE TRIGGER update_vw_users_trigger INSTEAD OF UPDATE ON vw_users FOR EACH ROW EXECUTE PROCEDURE vw_users_update_trigger(); CREATE TRIGGER delete_vw_users_trigger INSTEAD OF DELETE ON vw_users FOR EACH ROW EXECUTE PROCEDURE vw_users_delete_trigger();注意:触发器类型必须是
INSTEAD OF,不能是BEFORE或AFTER
最后更新于