入坑——MySql视图(VIEW)
视图定义:
sql视图是一种虚拟存在的表,它的内容由查询定义,和其他真实存在的表一样,视图包含一些带有名称的行数据和列数据。定义视图可以来至一张表或者几张表的数据。
视图特点:
视图简化了用户的操作:
可以让用户只关注自己感兴趣的数据而一些其他不关心的数据用户无需了解在表中
视图优点:
安全性:
视图的安全性可以阻止一些普通用户查看一些核心数据,让非授权用户只能查看到某些特定的列或者行:列如:建立视图,使用户只能看到关于自己的数据列,使得数据可以不发生改变
数据独立:
有了视图之后,程序可以直接建立在视图上,通过视图屏蔽控制相应的变化
- 如果程序应用建立在数据库表上,当数据库发生变化程序应用应当也会发生相应的变化;若程序应用建立在视图上时,可以通过视图不显示数据库表发生的变化,从而使得程序应用也不发生变化。同理,当应用发生变化时,可以通过视图的屏蔽作用使得数据库表不发生变化。
- 如果程序建立在视图之上,当数据库表发生变化时,可以修改视图,通过视图屏蔽掉数据库的变化使得程序不发生变化,同理。
视图基本操作——创建,查看,修改,删除
创建视图:
创建视图指的是在现有的数据库表上建立视图,视图可以有一张或者几张表。
创建视图的语法:
CREATE [OR REPLACE] [ALGORITHM={UNDEFIEND | MERGE | TEMPTABLE}]
VIEW view_name(视图名) [(column_list)(属性清单)]
AS SELECT statement
- CREATE,表示创建视图的关键字
- ALGORIGHM,可选参数,表示视图选择的算法
- UNDEFIEND,表示sql将自动选择,所有使用的算法
- MERGE,表示将使用视图的语句,与视图定义合并起来,使得视图定义的某一部分,取代语句的对应部分
- TEMPTABLE,表示将视图的结果存入临时表,然后使用临时表执行语句
- View_name,表示要创建的视图名称(说明:视图和表共享相同的命名空间,因此视图和表不能具有相同的名称,视图的名称应当遵循数据库表的命名规则)
- Column_list,可选参数,表示属性清单,指定了视图中各个属性的名称,默认情况下,与SELECT语句中查询的属性相同
- AS,表示指定视图要执行的操作
- SELECT ,是一个完整的查询语句,表示从某个表或视图中查出,某些满足条件的记录,将这些记录导入视图中
- statement 同查询语句语法相同
create view v_name as select course1;
创建视图的几点要求:
- 运行创建视图的语句要求用户具有创建视图的权限,
- select语句不能包括from字句中的子查询
- select语句不能引用系统或者用户变量
- select语句不能引用预处理语句的参数
- 在存储子程序内,定义不能引用子程序参数或者局部变量
- 在定义中引用的表或者视图必须存在
- 在定义中不能引用temporary表,不能创建temporary视图,
- 视图只定义中命名的必须存在
- 不能将触发器与视图关联在一起
- 在视图的定义中允许使用order by,但是,如果从特定视图中选择,而该视图使用了具有自己order by的语句,它将被忽略。
修改视图:
修改视图指的是修改数据库中已经的,当基本表的某些字段发生变化时,可以通过修改视图来保持视图和数据库表之间的一致性。mysql数据库中通过create or replace view语句和alter view语句来修改视图
alter view v_admin as select id,name,phone,telephone from t_admin where id in (select id from t_admin);
删除视图:
删除视图只能删除视图定义,不能删除数据,mysql中使用drop view来删除视图,但是用户必须拥有drop权限。
drop view if exists view_user;