MySQL面试(1):视图
视图的基本概念
视图是虚拟的表,本身不包含数据,也就不能对其进行索引操作。对视图的操作和对普通表的操作一样。
视图的优点
- 简单复杂的SQL操作,比如连接操作
- 只使用实际表的一部分数据,减小开销
- 通过只给用户访问视图的权限,保证数据的安全性
- 可以更改数据格式和表示
面试常问1:视图能更新吗?
首先肯定回答,能更新。不是所有的视图都可以更新,视图更新必须遵循以下规则
(1)若视图的字段是来自字段表达式或常数,则不允许对此视图执行INSERT、UPDATE操作,允许执行DELETE操作
(2)若视图的字段是来自库函数,则此视图不允许更新
(3)若视图的定义中有GROUP BY子句或聚集函数时,则此视图不允许更新
(4)若视图的定义中有DISTINCT任选项,则此视图不允许更新
(5)若视图的定义中有嵌套查询,并且嵌套查询的FROM子句中涉及的表也是导出该视图的基表,则此视图不允许更新
(6)若视图是由两个以上的基表导出的,此视图不允许更新
(7)一个不允许更新的视图上定义的视图也不允许更新
何时更新?
由一个基表定义的视图,只含有基表的主键或候补键,并且视图中没有用表达式或函数定义的属性,才允许更新。