当前位置: 首页 > news >正文

杭州手机网站建设公司 网络服务爬虫搜索引擎

杭州手机网站建设公司 网络服务,爬虫搜索引擎,免费项目发布平台,帮公司做网站一、概述 视图#xff08;View#xff09;本质上是一个存储在数据库中的查询语句。视图本身不包含数据#xff0c;也被称为虚拟表。 我们在创建视图时给它指定了一个名称#xff0c;然后可以像表一样对其进行查询。 优势#xff1a; 不保存数据#xff0c;节省空间。减少…一、概述 视图View本质上是一个存储在数据库中的查询语句。视图本身不包含数据也被称为虚拟表。 我们在创建视图时给它指定了一个名称然后可以像表一样对其进行查询。 优势 不保存数据节省空间。减少频繁调用 sql 的重复书写。可控制数据访问隐藏不想对外展示的数据。 劣势 可能增加数据库压力严重时会妨碍整个数据库的运行。常见于复杂视图 二、语法 2.1 创建视图 CREATE [ OR REPLACE ] [ TEMP | TEMPORARY ] [ RECURSIVE ] VIEW name [ ( column_name [, ...] ) ][ WITH ( view_option_name [ view_option_value] [, ... ] ) ]AS query[ WITH [ CASCADED | LOCAL ] CHECK OPTION ]CREATE VIEW定义一个查询的视图。 CREATE OR REPLACE VIEW如果已经存在一个同名视图该视图会被替换限制只能在原视图基础上增加字段不能减少字段,且增加字段顺序只能排在最后。 TEMPORARY|TEMP视图被创建为一个临时视图。在当前会话结束时会自动删掉。当临时视图存在时具有相同名称的已有永久视图对当前会话不可见除非用模式限定的名称引用它们。如果视图引用的任何表是临时的视图将被创建为临时视图不管有没有指定TEMPORARY。 RECURSIVE创建一个递归视图。 name要创建的视图的名字可以是模式限定的。 column_name要用于视图列的名称列表可选。如果没有给出列名会根据查询推导。 WITH ( view_option_name [ view_option_value] [, … ] )这个子句为视图指定一些可选的参数支持下列参数 check_option (enum)这个参数可以是 local 或者cascaded并且它等效于指定 WITH [ CASCADED | LOCAL ] CHECK OPTION见下文。 可以使用 ALTER VIEW 在一个现有视图上修改这个选项。 security_barrier (boolean)如果希望视图提供行级安全性应该使用这个参数。 query提供视图的行和列的一个 SELECT 或者 VALUES 命令。 WITH [ CASCADED | LOCAL ] CHECK OPTION这个选项控制自动可更新视图的行为。这个选项被指定时将检查该视图上的 INSERT 和UPDATE 命令以确保新行满足视图的定义条件也就是将检查新行来确保通过视图能看到它们。如果新行不满足条件更新将被拒绝。如果没有指定 CHECK OPTION会允许该视图上的 INSERT 和 UPDATE 命令创建通过该视图不可见的行。支持下列检查选项 LOCAL只根据直接定义在该视图本身的条件检查新行。任何定义在底层基视图上的 条件都不会被检查除非它们也指定了CHECK OPTION。 CASCADED会根据该视图和所有底层基视图上的条件检查新行。如果 CHECK OPTION 被指定并且没有指定 LOCAL 和 CASCADED则会假定为 CASCADED。 CHECK OPTION 不应该和 RECURSIVE视图一起使用。注意只有在自动可更新的、没有 NSTEAD OF 触发器或者 INSTEAD 规则的视图上才支持 CHECK OPTION。 如果一个自动可更新的视图被定义在一个具有 INSTEAD OF 触发器的基视图之上那么 LOCAL CHECK OPTION 可以被用来检查该自动可更新的视图之上的条件但具有 INSTEAD OF 触发器的基视图上的条件不会被检查一个级联检查选项将不会级联到一个 触发器可更新的视图并且任何直接定义在一个触发器可更新视图上的检查 选项将被忽略。如果该视图或者任何基础关系具有导致 INSERT 或 UPDATE 命令被重写的 INSTEAD 规则那么在被重写的查询中将忽略所有检查选项包括任何来自于定义在带有 INSTEAD 规则的关系之上的自动可更新视图的检查。 2.2 修改视图 ALTER VIEW [ IF EXISTS ] name ALTER [ COLUMN ] column_name SET DEFAULT expression ALTER VIEW [ IF EXISTS ] name ALTER [ COLUMN ] column_name DROP DEFAULT ALTER VIEW [ IF EXISTS ] name OWNER TO { new_owner | CURRENT_USER | SESSION_USER } ALTER VIEW [ IF EXISTS ] name RENAME TO new_name ALTER VIEW [ IF EXISTS ] name SET SCHEMA new_schema ALTER VIEW [ IF EXISTS ] name SET ( view_option_name [ view_option_value] [, ... ] ) ALTER VIEW [ IF EXISTS ] name RESET ( view_option_name [, ... ] )name一个现有视图的名称可以是模式限定的。 column_name现有列的名称。 new_column_name现有列的新名称。 IF EXISTS该视图不存在时不要抛出一个错误。这种情况下会发出一个提示。 SET/DROP DEFAULT这些形式为一个列设置或者移除默认值。对于任何在该视图上的 INSERT 或者 UPDATE 命令一个视图列的默认值会在引用该视图的任何规则或触发器之前被替换进来。因此该视图的默认值将会优先于来自底层关系的任何默认值。 new_owner该视图的新拥有者的用户名。 new_name该视图的新名称。 new_schema该视图的新模式。 SET ( view_option_name [ view_option_value] [, … ] )/RESET ( view_option_name [, … ] )设置或者重置一个视图选项。当前支持的选项有 check_option (enum)更改该视图的检查选项。值必须是 local 或者 cascaded。 security_barrier (boolean)更改该视图的安全屏障属性。值必须是一个布尔值如 true 或者 false。 2.3 删除视图 DROP VIEW [ IF EXISTS ] name [, ...] [ CASCADE | RESTRICT ]IF EXISTS如果该视图不存在则不要抛出一个错误而是发出一个提示。 name要移除的视图的名称可以是模式限定的。 CASCADE自动删除依赖于该视图的对象例如其他视图然后删除所有依赖于那些对象的对象。 RESTRICT如果有任何对象依赖于该视图则拒绝删除它。这是默认值。 三、示例 3.1 创建视图 --用下列三张基表构建包含员工姓名工作部门隐藏薪资的视图 postgres# select * from emp;employee_id | first_name | last_name | email | phone_number | hire_date | job_id | salary | commission_pct | manager_id | department_id -----------------------------------------------------------------------------------------------------------------------------------------100 | Steven | King | SKING | 515.123.4567 | 2003-06-17 | AD_PRES | 24000.00 | | | 90101 | Neena | Kochhar | NKOCHHAR | 515.123.4568 | 2005-09-21 | AD_VP | 17000.00 | | 100 | 90102 | Lex | De Haan | LDEHAAN | 515.123.4569 | 2001-01-13 | AD_VP | 17000.00 | | 100 | 90103 | Alexander | Hunold | AHUNOLD | 590.423.4567 | 2006-01-03 | IT_PROG | 9000.00 | | 102 | 60104 | Bruce | Ernst | BERNST | 590.423.4568 | 2007-05-21 | IT_PROG | 6000.00 | | 103 | 60105 | David | Austin | DAUSTIN | 590.423.4569 | 2005-06-25 | IT_PROG | 4800.00 | | 103 | 60106 | Valli | Pataballa | VPATABAL | 590.423.4560 | 2006-02-05 | IT_PROG | 4800.00 | | 103 | 60107 | Diana | Lorentz | DLORENTZ | 590.423.5567 | 2007-02-07 | IT_PROG | 4200.00 | | 103 | 60108 | Nancy | Greenberg | NGREENBE | 515.124.4569 | 2002-08-17 | FI_MGR | 12008.00 | | 101 | 100109 | Daniel | Faviet | DFAVIET | 515.124.4169 | 2002-08-16 | FI_ACCOUNT | 9000.00 | | 108 | 100 (10 rows)postgres# select * from jobs;job_id | job_title | min_salary | max_salary ---------------------------------------------------------------------AD_PRES | President | 20080 | 40000AD_VP | Administration Vice President | 15000 | 30000AD_ASST | Administration Assistant | 3000 | 6000FI_MGR | Finance Manager | 8200 | 16000FI_ACCOUNT | Accountant | 4200 | 9000AC_MGR | Accounting Manager | 8200 | 16000AC_ACCOUNT | Public Accountant | 4200 | 9000SA_MAN | Sales Manager | 10000 | 20080SA_REP | Sales Representative | 6000 | 12008PU_MAN | Purchasing Manager | 8000 | 15000PU_CLERK | Purchasing Clerk | 2500 | 5500ST_MAN | Stock Manager | 5500 | 8500ST_CLERK | Stock Clerk | 2008 | 5000SH_CLERK | Shipping Clerk | 2500 | 5500IT_PROG | Programmer | 4000 | 10000MK_MAN | Marketing Manager | 9000 | 15000MK_REP | Marketing Representative | 4000 | 9000HR_REP | Human Resources Representative | 4000 | 9000PR_REP | Public Relations Representative | 4500 | 10500 (19 rows)postgres# select * from dept;department_id | department_name --------------------------------1 | Adminstration2 | Marketing30 | Purchasing (3 rows)--构建视图 postgres# create or replace view emp_details_view postgres-# as select postgres-# e.employee_id, postgres-# e.job_id, postgres-# e.department_id, postgres-# e.first_name, postgres-# e.last_name, postgres-# d.department_name, postgres-# j.job_title postgres-# from emp e postgres-# join departments d on (e.department_id d.department_id) postgres-# join jobs j on (j.job_id e.job_id); CREATE VIEW postgres# select * from emp_details_view;employee_id | job_id | department_id | first_name | last_name | department_name | job_title ---------------------------------------------------------------------------------------------------------------100 | AD_PRES | 90 | Steven | King | Executive | President101 | AD_VP | 90 | Neena | Kochhar | Executive | Administration Vice President102 | AD_VP | 90 | Lex | De Haan | Executive | Administration Vice President103 | IT_PROG | 60 | Alexander | Hunold | IT | Programmer104 | IT_PROG | 60 | Bruce | Ernst | IT | Programmer105 | IT_PROG | 60 | David | Austin | IT | Programmer106 | IT_PROG | 60 | Valli | Pataballa | IT | Programmer107 | IT_PROG | 60 | Diana | Lorentz | IT | Programmer108 | FI_MGR | 100 | Nancy | Greenberg | Finance | Finance Manager109 | FI_ACCOUNT | 100 | Daniel | Faviet | Finance | Accountant (10 rows)3.2 修改视图 --增加入职时间字段字段顺序只能排在原视图末尾。其他修改原视图字段的操作只能删除视图重新创建 postgres# create or replace view emp_details_view postgres-# as select postgres-# e.employee_id, postgres-# e.job_id, postgres-# e.department_id, postgres-# e.first_name, postgres-# e.last_name, postgres-# d.department_name, postgres-# j.job_title, postgres-# e.hire_date postgres-# from emp e postgres-# join departments d on (e.department_id d.department_id) postgres-# join jobs j on (j.job_id e.job_id); CREATE VIEW postgres# select * from emp_details_view;employee_id | job_id | department_id | first_name | last_name | department_name | job_title | hire_date ---------------------------------------------------------------------------------------------------------------------------100 | AD_PRES | 90 | Steven | King | Executive | President | 2003-06-17101 | AD_VP | 90 | Neena | Kochhar | Executive | Administration Vice President | 2005-09-21102 | AD_VP | 90 | Lex | De Haan | Executive | Administration Vice President | 2001-01-13103 | IT_PROG | 60 | Alexander | Hunold | IT | Programmer | 2006-01-03104 | IT_PROG | 60 | Bruce | Ernst | IT | Programmer | 2007-05-21105 | IT_PROG | 60 | David | Austin | IT | Programmer | 2005-06-25106 | IT_PROG | 60 | Valli | Pataballa | IT | Programmer | 2006-02-05107 | IT_PROG | 60 | Diana | Lorentz | IT | Programmer | 2007-02-07108 | FI_MGR | 100 | Nancy | Greenberg | Finance | Finance Manager | 2002-08-17109 | FI_ACCOUNT | 100 | Daniel | Faviet | Finance | Accountant | 2002-08-16 (10 rows)--修改视图名 postgres# \dvList of relationsSchema | Name | Type | Owner ------------------------------------------public | emp_details_view | view | postgres (1 row)postgres# alter view if exists emp_details_view rename to emp_view; ALTER VIEW postgres# \dvList of relationsSchema | Name | Type | Owner ----------------------------------public | emp_view | view | postgres (1 row)--由于历史原因ALTER TABLE 也可以用于视图 postgres# alter table if exists emp_view rename to emp_view2; ALTER TABLE postgres# \dvList of relationsSchema | Name | Type | Owner -----------------------------------public | emp_view2 | view | postgres (1 row)3.3 删除视图 postgres# drop view emp_view2; DROP VIEW四、可更新视图 如果一个视图满足以下条件它就是自动可更新的 在该视图的 FROM 列表中刚好只有一项并且它必须是一个表或者另一个可更新视图。视图定义的顶层不能包含 WITH、DISTINCT、GROUP BY、HAVING、LIMIT 或者 OFFSET 子句。视图定义的顶层不能包含集合操作UNION、 INTERSECT 或者 EXCEPT。视图的选择列表不能包含任何聚集、窗口函数或者集合返回函数。 一个更加复杂的不满足所有这些条件的视图默认是只读的系统将不允许在该视图上的插入、更新或者删除。可以通过在该视图上创建一个 INSTEAD OF 触发器来获得可更新视图的效果该触发器必须把该视图上的尝试的插入等转换成其他表上合适的动作。 4.1 创建可更新视图 postgres# create or replace view employees_it as postgres-# select employee_id, postgres-# first_name, postgres-# last_name, postgres-# email, postgres-# phone_number, postgres-# hire_date, postgres-# job_id,manager_id, postgres-# department_id postgres-# from employees where department_id 60; CREATE VIEW postgres# select * from employees_it;employee_id | first_name | last_name | email | phone_number | hire_date | job_id | manager_id | department_id ------------------------------------------------------------------------------------------------------------103 | Alexander | Hunold | AHUNOLD | 590.423.4567 | 2006-01-03 | IT_PROG | 102 | 60104 | Bruce | Ernst | BERNST | 590.423.4568 | 2007-05-21 | IT_PROG | 103 | 60105 | David | Austin | DAUSTIN | 590.423.4569 | 2005-06-25 | IT_PROG | 103 | 60106 | Valli | Pataballa | VPATABAL | 590.423.4560 | 2006-02-05 | IT_PROG | 103 | 60107 | Diana | Lorentz | DLORENTZ | 590.423.5567 | 2007-02-07 | IT_PROG | 103 | 60 (5 rows)postgres# insert into employees_it(employee_id, first_name, last_name, email, phone_number, hire_date, job_id,manager_id,department_id)values(207,Tony,Dong,DONG,590.423.5568,2020-05-06,IT_PROG, postgres(# 103,60); INSERT 0 1 postgres# select * from employees_it;employee_id | first_name | last_name | email | phone_number | hire_date | job_id | manager_id | department_id ------------------------------------------------------------------------------------------------------------103 | Alexander | Hunold | AHUNOLD | 590.423.4567 | 2006-01-03 | IT_PROG | 102 | 60104 | Bruce | Ernst | BERNST | 590.423.4568 | 2007-05-21 | IT_PROG | 103 | 60105 | David | Austin | DAUSTIN | 590.423.4569 | 2005-06-25 | IT_PROG | 103 | 60106 | Valli | Pataballa | VPATABAL | 590.423.4560 | 2006-02-05 | IT_PROG | 103 | 60107 | Diana | Lorentz | DLORENTZ | 590.423.5567 | 2007-02-07 | IT_PROG | 103 | 60207 | Tony | Dong | DONG | 590.423.5568 | 2020-05-06 | IT_PROG | 103 | 60 (6 rows)4.2 可更新视图数据“丢失”问题 --视图为部门 id 为 60 的数据部门 id 为 80 的数据可插入成功但查询不到 postgres# insert into employees_it(employee_id, first_name, last_name, email, phone_number, hire_date, job_id,manager_id,department_id)values(2000,Tony,ong,ong,590.423.5568,2020-05-06,IT_PROG, 103,80); INSERT 0 1 postgres# select * from employees_it;employee_id | first_name | last_name | email | phone_number | hire_date | job_id | manager_id | department_id ------------------------------------------------------------------------------------------------------------103 | Alexander | Hunold | AHUNOLD | 590.423.4567 | 2006-01-03 | IT_PROG | 102 | 60104 | Bruce | Ernst | BERNST | 590.423.4568 | 2007-05-21 | IT_PROG | 103 | 60105 | David | Austin | DAUSTIN | 590.423.4569 | 2005-06-25 | IT_PROG | 103 | 60106 | Valli | Pataballa | VPATABAL | 590.423.4560 | 2006-02-05 | IT_PROG | 103 | 60107 | Diana | Lorentz | DLORENTZ | 590.423.5567 | 2007-02-07 | IT_PROG | 103 | 60207 | Tony | Dong | DONG | 590.423.5568 | 2020-05-06 | IT_PROG | 103 | 60 (6 rows)4.3 约束检查避免数据“丢失” --方式一创建视图时带约束检查 postgres# create or replace view employees_it as postgres-# select employee_id, postgres-# first_name, postgres-# last_name, postgres-# email, postgres-# phone_number, postgres-# hire_date, postgres-# job_id,manager_id, postgres-# department_id postgres-# from employees postgres-# where department_id 60 postgres-# with check option; CREATE VIEW--方式二创建视图后修改视图增加约束检查 postgres# alter view if exists employees_it set(check_option local(employee_id 60)); ALTER VIEW--增加检查约束后视图中不允许插入超出约束范围的数据 postgres# insert into employees_it(employee_id, first_name, last_name, email, phone_number, hire_date, job_id,manager_id,department_id)values(2000,Tony,ong,ong,590.423.5568,2020-05-06,IT_PROG, 103,80); ERROR: new row violates check option for view employees_it DETAIL: Failing row contains (2000, Tony, ong, ong, 590.423.5568, 2020-05-06, IT_PROG, null, null, 103, 80).
http://www.dnsts.com.cn/news/257772.html

相关文章:

  • 成都网站制作芜湖厂商安防网站源码
  • 企业做增资 网站平台龙岗网站制作新闻
  • 浙江振升建设有限公司网站wordpress部署ssl
  • 支付网站备案做网站需要商标注册吗
  • 医疗手机网站建设京东商城网站设计
  • 网站建设北京市广州网站排名推广公司
  • 外贸服装网站开发做外贸那个网站比较好
  • 做网站的域名怎样买锡盟建设工程造价信息网站
  • 建设网站项目简历门户网站指的是什么
  • 建设大学网站服务美工设计师是做什么的
  • 中企动力网站价格网站后台管理软件
  • 淘宝网站开发店铺什么类别视觉设计工作室
  • 做网站哪些软件后台系统免费模板网站
  • 做网站首页图的规格网站建设项目分析
  • 塔城市建设局网站开发人员工具
  • 网页设计与制作教案模板seo专员简历
  • 电子商务网站会员体系企业品牌策划案例
  • 建设网站需要租赁主机吗网站怎么做出来的
  • 电影网站建设方案门户网站建设管理工作方案
  • 公司网站要什么做网站建设 cms
  • 网站统计怎么做百度hi
  • 东莞做网站优化的公司网站建设合同贴花算哪一类
  • 个人网站有哪些网站建设网站的必要性
  • 有哪些做买家秀的网站甘肃省专业做网站
  • 成都解放号网站建设广州网站建设信科网络
  • 学做网站论坛坑人吗网站开发创新点
  • 昆明设计网站建设php 数据录入网站
  • 微网站是什么时候创建的医疗wordpress
  • 棋牌网站开发需要多少钱wordpress触屏主题
  • 做网站后台需要写代码吗创艺装饰公司口碑如何