视图的概念
准备测试表
下面用员工表和部门表作为测试表,员工表中的ename代表的是员工的姓名,deptno代表的是员工所在部门的部门号。如下:
部门表中的dname代表的是部门名,deptno代表的是部门的部门号。如下:
创建视图
创建视图的SQL如下:
CREATE VIEW view_name AS SELECT ...;
说明一下:
当我们要查询每个员工及其对应的部门名称时,需要使用员工表和部门表进行多表查询,并筛选出员工的部门号等于部门的部门号的记录。如下:
如果该查询结果会被频繁用到,那我们就可以给上述查询结果创建视图,创建完毕后通过show命令就能看到这个视图。如下:
并且在数据库对应的目录下,会增加一个对应的xxx.frm
文件,但并没有与之对应的xxx.ibd
文件,这也证明了视图和基表使用的是同一份数据。如下:
创建视图后就可以直接通过查询视图,来查看每个员工及其对应的部门名称了。如下:
修改视图影响基表
通过查询员工表,可以看到员工CLARK所在部门的部门号为10。如下:
进一步查询部门表,可以看到10号部门的部门名称为ACCOUNTING。如下:
在视图中将员工CLARK所在部门的部门名改为HR后,会看到其他一些员工所在部门的部门名也变为HR了。如下:
根本原因就是因为视图和基表使用的是同一份数据,将视图中CLARK所在部门的部门名改为HR后,部门表中10号部门的部门名也就变成HR了。如下:
而位于10号部门的员工同时还有KING和MILLER,因此修改后再次查询视图时,这两个员工对应的部门名也会变为HR。如下:
修改基表影响视图
通过查询员工表,可以看到员工JAMES所在部门的部门号为30。如下:
30号部门的部门名为SALES,因此查询视图时可以看到JAMES所在的部门名为SALES。如下:
现在将员工表中,员工JAMES对应的部门号改为20。如下:
修改后再查询视图,就会发现JAMES所在部门的部门名,变成了20号部门的部门名RESEARCH。如下:
删除视图
删除视图的SQL如下:
DROP VIEW view_name;
比如将刚才创建的视图删除后,在数据库中就看不到这个视图了。如下:
并且该视图在数据库目录下对应的xxx.frm
文件也会被删除。如下:
视图规则和限制