视图是基于数据表而建立的数据库对象,视图可以像表一样使用,但数据库中仅存储视图的定义不存储视图的数据,视图是基于基础表导出的虚表。
使用Navicat等图形工具,在对象管理器中选中视图节点,然后单击“新建视图”按钮打开“视图创建工具”窗口,然后在图形界面中添加相应的表并选择相关字段即可定义视图。
使用命令动词CREATE VIEW,直接在编辑器编写视图定义代码。
使用CREATE VIEW创建视图的命令语法格式如下:
CREATE[ALGORITHM={UNDEFINED|MEGER|TEMPTABLE}] VIEW视图名[ (列[ ,...n ] ) ]
AS
SELECT语句
[ WITH [CASCADED|LOCAL] CHECK OPTION ]
CREATE VIEW创建语法说明如下:
1)视图名应符合标识符的命名规则。
2)ALGORITHM为可选参数,不表示视图选择的算法,其取值有三个UNDEFINED、MEGER和TEMPTABLE。
3)(列 [ ,...n ] )用于指定视图中各列的名称,这里指定的列名与SELECT语句结果集列一一对应。若省略这个列名列表,将直接使用SELECT语句中的列名称(注意此时不能出现无列名的列)。
4)SELECT语句用于定义视图,SELECT语句中可以使用多个表或其他视图。
5)WITH [CASCADED|LOCAL] CHECK OPTION为可选参数,表示用于限制通过视图执行的所有UPDATE语句必须在该视图的权限范围之内。其中CASCADED为默认值,表示更新视图时要满足所有相关视图和基本表的条件,在MySQL 5.7.6版本以后LOCAL表示更新视图时MySQL会检查WITH LOCAL CHECK OPTION和WITH CASCADED CHECK OPTION选项的视图和条件。
任务实现
在编辑窗口编写代码如下:
CREATE VIEW v_yxxsmd
AS
SELECT d.dept_id,dept_name,s_id,s_name
FROM department d join student s on d.dept_id=s.dept_id
ORDER BY d.dept_id;
创建过程小结
1)代码中省略了视图名称后的列名列表,将直接使用SELECT语句中列名作为视图的列名。
2)本例中是基于department和student两张表的连接查询生成的视图,在实际应用的过程中视图可以基于前面学习过的各种类型的查询来生成。
3)视图除了可以从基本表中直接查询生成,还可以从已经创建好的视图中进行查询来生成。
在视图创建完成以后,可以通过三类语句来查看视图的基本信息、结构和定义文本。
1)使用SHOW TABLE STATUS语句查看视图的基本信息的语法格式为:
SHOW TABLE STATUS LIKE '视图名'
2)使用DESCREIBE或DESC语句查看视图的结构信息的语法格式为:
DESCRIBE '视图名' /DESC '视图名'
3)适应SHOW CREATE VIEW语句查看视图的定义文本的语法格式为:
SHOW CREATE VIEW '视图名'
查看过程小结
1)从SHOW TABLE STATUS LIKE 'v_yxxsmd'的执行结果来看,Name的值为v_yxxsmd,Comment的值为VIEW,说明该对象为视图,其他信息均为NULL,说明该对象为虚表。
2)从DESCRIBE v_yxxsmd的执行结果来看,结果显示了视图的字段定义、字段的数据类型、是否为空、是否为主/外键、默认值和其他信息。
3)从SHOW CREATE VIEW v_yxxsmd的执行结果来看,结果显示了视图的名称、创建视图的定义文本、客户端使用的编码以及校对规则等。