电商网站设计流程,某网站seo策划方案,网站开发维护费计入什么科目,河北省建设银行网站目录
一、什么是视图
二、视图的作用
三、创建视图
四、使用视图
1.使用视图查询员工信息
五、注意事项
六、补充 一、什么是视图
视图是基于查询的虚拟表#xff0c;是一个逻辑表#xff0c;本身并不包含数据。同真实的表一样#xff0c;视图包含一系列带有名称的列…目录
一、什么是视图
二、视图的作用
三、创建视图
四、使用视图
1.使用视图查询员工信息
五、注意事项
六、补充 一、什么是视图
视图是基于查询的虚拟表是一个逻辑表本身并不包含数据。同真实的表一样视图包含一系列带有名称的列和行数据在使用视图时动态生成。视图就是一条SELECT语句执行后返回的结果集。
SELECT所查询的表称为视图的基表而查询的结果集称为虚拟表视图本身并不存储具体的数据视图的数据存在于视图的基表中基本表数据发生了改变视图的数据也会跟着变化。
二、视图的作用
使用视图是为了方便复杂的查询语句。基本思路是将复杂的查询语句定义在视图内部然后对视图进行查询从而简化复杂的查询语句。
为什么要使用视图
视图的诸多优点如下
简单使用视图的用户完全不需要关心后面对应的表的结构、关联条件和筛选条件对用户来说已经是过滤好的复合条件的结果集。安全使用视图的用户只能访问他们被允许查询的结果集对表的权限管理并不能限制到某一行某一列但是通过视图就可以简单的实现。数据独立一旦视图的结构确定了可以屏蔽表结构变化对用户的影响源表增加列对视图没有影响源表修改列名则可以通过修改视图来解决不会造成对访问者的影响。总而言之使用视图的大部分情况是为了保障数据安全性提高查询效率。
三、创建视图
CREATE VIEW 视图名
AS
SELECT列1列2...
FROM 表;
修改视图
ALTER VIEW 视图名 AS SELECT 语句
显示视图创建
SHOW CREATE VIEW 视图名; 查看视图
SHOW TABLES;
-- 当作普通表使用
删除视图
DROP VIEW 视图名[,视图名...]; 重命名视图
RENAME TABLE 视图名 TO 新视图名;
四、使用视图
需求查询员工信息要求显示员工编号、姓名、所属的部门。
select empno,ename,dname
from emp inner join dept on emp.deptnodept.deptno;这是两张表连接查询如果查询涉及的表越多查询变得越复杂。
1.使用视图查询员工信息
定义视图
CREATE VIEW v_emp
AS
SELECT empno,ename,dname FROM emp INNER JOIN dept ON emp.deptno dept.deptno;
使用试图
select * from v_emp 五、注意事项
视图的主要作用与查询相关。可以通过视图插入数据但只能基于一个基表进行插入不能同时向多个基表插入数据。 insert into v_emp(empno,dname) values(10,测试) ; 3. 可以通过视图修改数据但只能基于一个基表进行修改不能同时修改多个基表的数据。
4. 可以通过视图删除数据但只能删除单表查询的视图不能删除多表连接查询视图中的数据。
5.虽然通过视图也可以对数据进行添加、删除、修改但不推荐。
6.使用drop view语句可以删除视图。
7.select语句不能引入系统或用户变量。
六、补充
CREATE [OR REPLACE] [ALGORITHM{UNDEFINED | MERGE | TEMPTABLE}] VIEW 视图名[(列1列
2...)] AS SELECT (列1列2...)
[WITH [CASCADE | LOCAL] CHECK OPTION]
on replace:如果已有同名视图则替换。algorithm:视图算法。undefinedMySQL将自动选择所要使用的算法。merge将视图的语句与视图定义合并起来使得视图定义的某一部分取代语句对应部分。temptable:将视图的结果存入临时表然后使用临时表执行语句。 缺省algorithm选项等同于algorithmundefined check option表示修改视图时检查插入的数据是否符合where设置的条件。cascaded/local:表示check option的范围。 当不加local或cascaded时默认为cascaded。local表示只验证当前视图检查所依赖的视图有没有检查选项如果有就会检查所依赖的视图没有就不检查cascaded表示所依赖的视图会带上检查选项。该语句的作用 update时要保证数据update之后能被视图查询出来也就是要符合where的条件 insert时保证insert的数据能被视图查询出来。 delete时有无with check option都一样 对于没有where字句的视图使用with check option是多余的。
-- 没有 with check option
create view v_emp
as select * from emp;
-- 有 with check option 视图 sql 中没有 where 所以 with check option 没啥作用
create or replace view v_emp
as select * from emp with check option; -- 相当于 with cascaded check option
-- 有 with check option
create or replace view v_emp
as select * from emp where sal 2000
with check option;
select * from v_emp;
-- 修改视图值
update v_emp set sal 2100 where empno 7788;
-- 通过原表修改
update emp set sal 10 where empno 7788;
-- with local check option cascaded
create or replace view v_emp
as select * from emp where sal 2000;
create or replace view v_v_emp as select * from v_emp where sal 1000 with local
check option;
select * from v_v_emp;
-- local 只管当前视图
update v_v_emp set sal 1900 where empno 7788;
-- cascaded 表示底层视图也要验证
create or replace view v_emp
as select * from emp where sal 2000;
create or replace view v_v_emp as select * from v_emp where sal 1000 with cascaded
check option;
update v_v_emp set sal 1900 where empno 7788;