大家好,作为一名互联网行业的小白,写博客只是为了巩固自己学习的知识,但由于水平有限,博客中难免会有一些错误出现,有不妥之处恳请各位大佬指点一二!
博客主页:链接: https://blog.csdn.net/weixin_52720197?spm=1018.2118.3001.5343
1. 创建视图
create [or replace] [algorithm = {undefined |merge | temptable}]
view view_name [(column_list)]
as select_statement
[with [cascaded | local] check option];
其中:
create view:为创建视图所使用的关键字;
or replace:可选项,若给定了 or replace,则表示新视图将会覆盖掉数据库中同名的原有视图。
algorithm:可选项,表示视图选择的执行算法;
undefined:表示 MySQL 会自动选择视图的执行算法,当用户创建视图时,MySQL默认使用一种 undefine 的处理算法,即在 merge 和 temptable 两种算法中自动选择其中
的一种;
merge:视图的执行算法之一,这种算法会将引用视图的语句与视图定义合并起来,使得视图定义的某一部分取代语句的对应部分;
temptable:视图的执行算法之一,这种算法会将视图的结果置于临时表中,然后使用该临时表执行语句;
view_name:表示将要创建的视图名称;
column_list:可选项,表示视图中的字段列表;如果不指定字段列表,也就是默认情况下,该字段列表与 select 子句中指定的字段列表相同;
as:用于指定视图要执行的操作;
select_statement:表示一条完整的查询语句,通过该查询语句可从若干张张表或其它的视图中查询到满足条件的记录,这些记录就是视图中的数据;
with check option:可选项,用来限制插入或更新到视图中的记录;
cascaded:表示更新视图时需要满足与该视图相关的所有视图和表的条件。没有指明时,该参数为默认值;
local:表示更新视图时只要满足该视图本身定义的条件即可。在创建视图时,用户不仅需要有 CREATE VIEW 权限,还需要有查询所涉及数据的SELECT 权限;如果要查看视图还需要有 SHOW VIEW 权限;如果使用 CREATE ORREPLACE,则还需要 DROP 权限;如果使用 ALTER VIEW,则需要 SUPER 权限。
1.1. 单表上创建视图
create view view1_emp
as select empno, ename, job, mgr, hiredate, deptno from emp;
1.2.多表上创建视图
create view view2_emp
as select e.empno, e.ename, e.job, d.deptno, d.dname, d.loc
from emp e inner join dept d
on e.deptno=d.deptno;
1.3.其他视图上创建视图
create view view3_emp
as select empno, ename, job, deptno, dname from view2_emp
where loc='New York';
2.查看视图
2.1. SHOW TABLES 语句查看视图
show tables;
2.2. SHOW TABLE STATUS 语句查看视图
show table status [{from | in} db_name] [like 'pattern'];
其中,“show table status”为查看视图详细信息所使用的固定语法格式;
“dp_name”可选项,表示要查询视图所在数据库的名称,如果省略该项,则表示在当前数据库中查找视图;
“like”进行视图名称匹配时所用的关键字;
“pattern”在此可以理解为要查询的视图名称,视图名称要用单引号引起来;
“like 'pattern'”为可选项,如果省略该项则会查询指定或默认数据库中所有的表和视图。
2.3. DESCRIBE 语句查看视图
describe view_name;
或者我们可以使用简写的方式,如下所示:
desc view_name;
其中“describe”为查看视图设计信息的固定语法格式,可以简写为“desc”;
“view_name”为要查看的视图的名称。
2.4. SHOW CREATE VIEW 语句查看视图
show create view view_name;
其中“show create view”为查看视图定义信息所使用的固定语法结构;“view_name”为要查看的视图名称。
3.修改视图
3.1.CREATE OR REPLACE 语句修改视图
create or replace view view1_emp
as select ename, job, mgr, hiredate, deptno from emp;
3.2.ALTER VIEW 语句修改视图
alter [algorithm = {undefined | merge | temptable}]
view view_name [(column_list)]
as select_statement
[with [cascaded | local] check option];
将 view1_emp 视图中的 hiredate 字段隐藏掉
4.删除视图
drop view [if exists]
view_name1 [, view_name2] ...
其中,“drop view”为删除视图所使用的固定语法;“if exists”可选项,如果给定
该项,可以保证即使指定要删除的视图有的不存在,系统也不会提示错误,而是只删除存在
的视图,如果省略该项,那么如果指定要删除的视图有的不存在,系统会提示错误,但是仍
然会删除存在的视图;“view_name1”和“view_name2”表示要删除的视图名称,可以
添加多个,各个名称之间使用逗号隔开。
5.更新视图
5.1.使用 INSERT 语句更新视图
insert into view1_emp values (000, 'Tom', 'analyst', 7566, '182-6-12', 20);
5.2.使用 DELETE 语句更新视图
【示例】使用 DELETE 语句更新视图
delete from view1_emp where ename='Tom';
【示例】使用 SELECT 语句查看 view1_emp 视图中是否已经删除数据
select * from view1_emp where deptno=20;
【示例】使用 SELECT 语句查看 emp 表中是否已经删除数据
select * from emp where deptno=20;
5.3. 使用 UPDATE 语句更新视图
【示例】使用 UPDATE 语句更新视图
update view1_emp set job='analyst' where ename='Smith';
【示例】使用 SELECT 语句查看 view1_emp 视图中是否已经修改数据
select * from view1_emp where ename='Smith';
【示例】使用 SELECT 语句查看 emp 表中是否已经修改数据
select * from emp where ename='Smith';