查看概念
视图是一个虚拟表,其内容由查询定义。 与真实的表一样,视图包含一系列命名的数据列和行。 但是,视图并不作为一组存储的数据值存在于数据库中。 它的数据来自自定义视图查询时引用的表,并在引用视图时动态生成。
视图的作用类似于它们引用的基础表的过滤器。 定义视图的过滤器可以来自当前或其他数据库中的一个或多个表,或者来自其他视图。 通过视图查询没有任何限制,通过视图修改数据也很少有限制。
视图的定义是基于基本表的。 与直接操作基本表相比,视图有以下四个优点。
(1)简化用户操作。 视图机制可以让用户专注于他们关心的数据。 如果数据不是直接来自基础表,可以定义视图,使数据库在结构上看起来简单明了,简化用户的数据查询操作。 例如,定义一个连接多个表的视图,从而对用户隐藏了表之间的连接操作。 也就是说,用户只对虚拟表进行简单的查询操作,而不知道该表的来源。
(2)使用户能够从多个角度查看相同的数据。 查看机制使得不同的用户可以以不同的方式查看相同的数据。 当许多不同类型的用户共享同一个数据库时,这种灵活性是非常必要的。
(3)为重建数据库提供一定程度的逻辑独立性。 数据的物理独立性是指用户的应用程序不依赖于数据库的物理结构。 数据的逻辑独立性是指数据库重构时(如增加新的关系或者在原有的关系上增加新的字段),用户的应用不会受到影响。
(4)为机密数据提供安全保护。 通过视图机制,可以在设计数据库应用系统时为不同的用户定义不同的视图。 普通用户无法看到机密数据,因此查看机制自动为机密数据提供安全保护。 例如,该表涉及学校15个系的学生数据,可以在其上定义15个视图。 每个视图只包含一个系的学生数据,并且只允许每个系的管理员查询和修改该系。 学生观点。
查看操作
详细阐述了视图的基本概念,然后讲解了视图的操作,包括创建视图、查看视图、修改视图、更新视图和删除视图。
数据准备
在讲解视图之前,需要创建两个数据表(员工表emp和员工明细表)并插入数据,用于下面的示例演示。 员工表emp的表结构如表8.1所示。
表8.1 雇员表
场地
字段类型
阐明
ID
整数
员工ID
姓名
字符(30)
员工的名字
性别
字符(2)
员工性别
年龄
整数
员工年龄
字符(10)
部门
整数
员工工资
家
字符(30)
员工户籍
结婚
字符(2)
是否结婚
爱好
字符(30)
爱好
表8.1列出了员工表的字段、字段类型和描述,然后创建了员工表。
创建好员工表后,向表中插入数据。
以上执行结果证明数据插入完成。 然后查看表中的数据。
员工明细表的表结构如表8.2所示。
表 8.2 表
场地
字段类型
阐明
ID
整数
员工ID
位置
字符(10)
员工职位
字符(10)
工作经验
员工明细表的字段、字段类型和说明如表8.2所示。 然后创建员工详细信息表。
创建员工明细表后,向表中插入数据。
mysql> INTO (ID,POS,)
以上执行结果证明数据插入完成。 然后查看表中的数据。
创建员工明细表后,向表中插入数据。
查看操作
创建视图
创建视图时,当前用户必须具有创建视图的权限以及查询涉及列的权限。 当前登录的用户是root。 检查该用户是否有创建视图的权限。
从上面的执行结果可以看出,当前用户有创建视图的权限,可以创建视图。 具体语法格式如下。
在上述语法格式中,创建视图的语句由多个子句组成。 接下来详细分析各部分语法格式,如下。
l:表示创建视图的关键字。
l OR:如果给出该子句,则表示该语句可以替换现有视图。
l:可选参数,表示视图选择的算法。
l:表示MySQL会自动选择使用的算法。
l MERGE:表示使用视图的语句将与视图的含义进行合并,使视图定义的某一部分取代语句的相应部分。
l:表示将视图的结果存储到临时表中,然后使用临时表来执行语句。
l:表示要创建的视图的名称。
l:是可选参数,代表属性列表,指定视图中每个属性的名称。 默认情况下与语句中查询的属性相同。
l AS:表示指定视图要执行的操作。
l:表示从表或视图中查找符合条件的某些记录,并将这些记录导入到视图中。
l WITH CHECK:这是一个可选参数,表示创建视图时,必须在该视图的权限范围内。
l:可选参数,表示创建视图时需要满足所有相关视图以及与该视图相关的表的条件。 该参数为默认值。
l LOCAL:这是一个可选参数,表示创建视图时,只需满足视图本身定义的条件即可。
以上是创建视图的语法格式。 视图可以构建在一个表或多个表上。 接下来,我们将对这两种情况分别进行解释。
1. 在单个表上创建视图
这里,我们使用准备好的数据在 emp 表上创建一个视图,包含 id、name、sex、age 等列。
以上执行结果证明视图创建成功。 然后使用语句查看视图。
从上面的执行结果可以看出,该视图与emp表不同。 该视图只显示emp表的部分数据,隐藏其他部分数据,这样可以保护部分数据。
2. 在多个表上创建视图
之前我们解释了如何在单个表上创建视图。 用户还可以在多个表上创建视图。 接下来我们以两个基本表为例,通过具体案例来演示如何在多个表上创建视图。
在emp表和表上创建一个视图,包含列id、name、sex、age、、pos和。
以上执行结果证明视图创建成功。 然后使用语句查看视图。
从上面的执行结果可以看出,基于多个表创建视图与基于单个表创建视图类似。 不同的是需要多表的连接查询。
查看视图
查看视图的操作需要当前登录的用户具有查看视图的权限。 当前登录的用户是root。 检查该用户是否有查看视图的权限。
从上面的执行结果可以看出,当前用户具有查看视图的权限,即可以执行查看视图的操作。 可以通过三种方式查看视图。 下面分别对这三种方式进行说明。
1、使用语句查看视图的字段信息
可以使用语句来查看视图的字段信息。 具体语法格式如下。
该语句与查询数据表字段信息的语句类似。 也可以缩写为 DESC。 具体语法格式如下。
使用语句查看视图的字段信息。
2、使用SHOW TABLE语句查看视图的基本信息
可以使用SHOW TABLE语句查看视图的基本信息。 具体语法格式如下。
在上面的语法格式中,LIKE关键字匹配一个字符串,视图名称需要用单引号引起来。
3、使用SHOW VIEW语句查看视图的详细信息
使用 SHOW VIEW 语句可以查看有关视图的详细信息。 具体语法格式如下。
使用SHOW TABLE语句可以查看视图的基本信息。
从上面的执行结果可以看出,视图的值为VIEW,其他大部分值为NULL。 由于视图不是具体的数据表,而是虚拟表,因此存储引擎、数据长度等信息显示为NULL。
使用 SHOW VIEW 语句查看视图的详细信息。
从上面的执行结果可以看出,使用SHOW VIEW语句不仅可以查询创建视图的定义语句,还可以查询视图的字符编码。
修改视图
修改视图意味着修改数据库中现有表的定义。 当基表的某些字段发生变化时,可以通过修改视图来保持视图与基表的一致性。 MySQL 中的视图是通过 OR VIEW 语句和 ALTER 语句修改的。
1.使用OR VIEW语句修改视图
使用 OR 子句时,用户必须具有删除视图的权限。 此时登录的用户就是root用户。 检查该用户是否有删除视图的权限。
从上面的执行结果可以看出,当前用户有删除视图的权限。
可以使用 OR VIEW 语句修改视图。 具体语法格式如下。
使用上述语法修改视图时,如果修改的视图存在,则该视图将被修改; 如果修改的视图不存在,则会创建一个视图。
2.使用ALTER语句修改视图
ALTER 语句还可以修改视图。 具体语法格式如下。
要使用该语句,您必须具有创建和删除视图的权限,并且必须具有查询涉及的列的权限。
更新视图
因为视图是一个虚拟表,所以当你更新视图中的数据时,你实际上是在更新创建视图的基表中的数据。 例如,如果删除视图中的数据,基表中的数据也会被删除。 因此,当用户更新视图时要小心。 更新视图可以更新、插入和删除相应基础表中的数据。 接下来我们就详细讲解一下更新视图的三种方式。
1.使用语句更新视图
该语句可以更新视图中的原始数据。 具体语法格式如下。
在上述语法格式中,“字段名”用于指定要更新的字段的名称,“值”用于指示字段更新的新数据。 如果需要更新多个字段的值,可以用逗号分隔多个字段和值。 “WHERE条件表达式”是可选的,用于指定更新数据需要满足的条件。
使用该语句将视图中名为赵刘的员工的性别更改为女性。
首先查看视图中的数据。
然后修改数据。
以上执行结果证明视图数据修改成功。 使用语句来查看视图。
从上面的执行结果可以看出,名叫赵刘的员工的性别变成了女性,说明视图更新成功。
此时还可以查看基础表emp中的数据是否被修改。
从上面的执行结果可以看出,基本表emp中的数据也被修改了,说明更新视图直接修改了基本表中的数据。
2.使用语句更新视图
语句可用于将数据插入到视图中。 具体语法格式如下。
在上述语法格式中,值1、值2等是要添加到每个字段的数据。 每个值的顺序和类型必须与表中字段的顺序和类型相对应。
使用语句将数据插入到视图中。 名字叫周巴,年龄25岁。
以上执行结果证明视图数据插入成功。
然后使用语句查看视图。
从上面的执行结果可以看出,视图中多了一条数据。 其实这是直接向基础表插入数据。
3.使用语句更新视图
语句可用于删除视图中的数据。 具体语法格式如下。
上述语法格式中,“WHERE条件表达式”是可选的,用于指定删除数据的条件。
使用该语句删除视图中名为的数据。
以上执行结果证明视图数据删除成功。
然后使用语句查看视图。
从上面的执行结果可以看出,视图中名为的数据已经被删除。 其实这也是直接删除了基础表中的数据。
删除视图
删除视图时,当前用户必须有删除视图的权限。 检查删除视图权限的方法这里不再赘述。 删除视图的语法如下。
在上述语法格式中,视图名称是要删除的视图的名称。 可以添加多个视图名称,以逗号分隔。 IF(可选参数)用于判断视图是否存在。 如果存在,请将其删除。
删除视图。
以上执行结果证明视图删除成功。 然后使用该语句查看视图是否存在。
以上执行结果证明该视图已不存在,视图删除成功。