百度网站建设中心,网站建设公司投融资分析,工地临时工400元一天,软件前端开发工程师目录
MySQL视图特性
基本使用
准备测试表
创建视图
修改视图影响基表
修改基表影响视图
删除视图
视图规则和限制 MySQL视图特性 视图的概念 视图是一个虚拟表#xff0c;其内容由查询定义#xff0c;同真实的表一样#xff0c;视图包含一系列带有名称的列和行数据。…目录
MySQL视图特性
基本使用
准备测试表
创建视图
修改视图影响基表
修改基表影响视图
删除视图
视图规则和限制 MySQL视图特性 视图的概念 视图是一个虚拟表其内容由查询定义同真实的表一样视图包含一系列带有名称的列和行数据。视图中的数据并不会单独存储在数据库中其数据来自定义视图时查询所引用的表基表在每次引用视图时动态生成。由于视图和基表用的本质是同一份数据因此对视图的修改会影响到基表对基表的修改也会影响到视图。
基本使用
准备测试表 准备测试表 下面用员工表和部门表作为测试表员工表中的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文件也会被删除。如下
视图规则和限制 视图规则和限制 与普通表一样视图的命名也必须是唯一的不能出现同名视图或表名。创建视图的数目无限制但要考虑复杂查询创建为视图之后的性能影响。视图不能添加索引也不能有关联的触发器或者默认值。视图可以提高安全性在访问视图时必须具有足够的访问权限。创建视图时可以使用order by子句但如果从该视图检索数据时也含有order by子句那么该视图中的order by将被覆盖。视图可以和普通表一起使用比如进行多表查询内外连接等。