MySQL-视图

MySQL视图的操作、检查与更新

目录

介绍

基本操作语法

创建视图

查看视图创建语句

查看视图数据

修改视图

删除视图

检查选项

with cascaded check option

with local check option 

更新及作用

更新的条件

更新的作用

简单

安全

数据独立


介绍

视图是一种虚拟的表,在数据库中并不真实存在。更简单地说,就是视图并不储存数据,只是纪录了数据的逻辑。

基本操作语法

创建视图

create or replace view name_gen as select user_name,user_gender from users where user_id <=10;

查看视图创建语句

show create view name_gen;

查看视图数据

select *from name_gen;

修改视图

create or replace view name_gen as select user_name,user_gender,uesr_num from users where user_id <=10;
alter view name_gen as select id,name from user where id<=10;

可以添加新的字段,或删除字段。

删除视图

drop view if exist name_gen;

不难发现,视图是一种特殊的表,所以可以想使用表一样来操作视图。

检查选项

我们开始说过,视图当中是不存数据的,试图展示的只是数据间的逻辑关系。

那么大家思考一下,如果我想对表一样,针对视图进行插入操作,还会不会有数据的变化呢?

答案是会变化的,但是变化的本质不是视图,而是视图表示的那张真实存在的数据表,我们将其称为基表

简单来说,针对视图进行的插入操作,最后会直接作用于基表,此时不管进行表的查询还是视图的查询都会发现数据的修改

那么对使视图的插入操作会影响到数据表,就会带来一系列的问题,比如:

我创建了一个有十条数据的视图(字段为id和name),,假设基表有5条数据:

create or replace view id_name as select user_id,user_name from users where user_id <=10;

然后针对视图进行插入数据的操作:

insert into name_gen values(8,"小昭");

此时我们知道,基表已经多了一条数据,而我们再进行视图或者基表的查询时,能够看见数据的变化。

那么再次插入一条数据:

insert into name_gen values(12,"光头强");

我们先查看基表,数据变确实变化了。但是我们进行视图视图查询时,发现视图并没有变化!!!

我们回顾一下视图的创建语句,我们使用了约束函数where,约束了id的范围,这就一定程度破坏数据的一致性。

而解决这个问题可以在视图创建时加上检查选项:

create or replace view id_name as select user_id,user_name from users where user_id <=10
with cascaded check option;
--with local check option

介绍

在使用 with local check option 时,MySQL会检查视图的每一个正在更新的行,并确保它符合视图的创建条件。MySQL允许基于一个视图创建另一个视图,为了规定检查的范围,mysql提供了两个选项:

  • with cascaded check option

 cascaded就是,当某一个视图是建立在另一个视图上创建的,就会对该视图以及所关联的视图进行检查,必须要都满足,才能进行合法操作。

这里要非常注意的是,虽然即使在创建视图时使用了约束函数where,但是如果没有指定检查选项时,在更新视图时不会去判断where中的条件。 

  • with local check option 

与cascaded的区别在于,local只会为当前语句创建检查选项,并不会为关联的表创建检查选项。 

更新及作用

更新的条件

视图中的行必须与基础表中的行一一对应关系。

视图包含下面任何一项则不可更新:

  1. 聚合函数
  2. DISTINCT
  3. group by
  4. having
  5. UNION、UNION ALL

更新的作用

  • 简单

视图可以简化数据的操作,如果一项查询被经常使用,就可以将其写成视图,就不用每次查询的时候都去指定一系列条件。

  • 安全

虽然数据库可以进行授权操作,但是并不能具体到数据表的行和列上。而通过视图,用户只能修改视图中的可见数据。

  • 数据独立

能够消除底层基表变化带来的影响(用户不需要关心视图背后的实际数据来源)        

### 关于头歌平台 MySQL 数据库视图的使用教程及示例 在头歌平台上,MySQL 视图的使用与其他数据库管理系统的视图使用方式基本一致。视图是一种虚拟表,其内容由查询定义[^2]。视图并不存储实际的数据值集,而是通过引用定义视图的查询动态生成数据行和列。以下是关于头歌平台中 MySQL 数据库视图的详细使用教程及示例。 #### 一、视图的基本概念 视图是基于一个或多个基础表的 SELECT 查询结果创建的虚拟表。它不存储实际数据,而是在访问时动态生成数据[^2]。视图的主要用途包括简化复杂查询、保护敏感数据以及提供数据抽象。 #### 二、视图的创建语法 创建视图的基本语法如下: ```sql CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}] [DEFINER = { user | CURRENT_USER }] [SQL SECURITY { DEFINER | INVOKER }] VIEW view_name [(column_list)] AS select_statement [WITH [CASCADED | LOCAL] CHECK OPTION]; ``` - `CREATE OR REPLACE`:如果视图已存在,则替换原有视图- `ALGORITHM`:指定视图的处理算法(`UNDEFINED`、`MERGE` 或 `TEMPTABLE`)。 - `DEFINER`:定义视图的用户。 - `SQL SECURITY`:指定视图的安全性上下文(`DEFINER` 或 `INVOKER`)。 - `view_name`:视图名称。 - `column_list`:可选的列名列表。 - `select_statement`:用于定义视图的 SELECT 查询语句。 - `WITH CHECK OPTION`:确保更新后的数据满足视图的定义条件。 #### 三、视图的使用示例 以下是一些常见的视图使用示例,适用于头歌平台中的 MySQL 数据库: 1. **创建简单的视图** 创建一个名为 `v_employee_departments` 的视图,显示员工 ID、姓名和部门名称。 ```sql CREATE VIEW v_employee_departments AS SELECT e.employee_id, e.name, d.dept_name FROM employees e JOIN departments d ON e.dept_id = d.dept_id; ``` 这个视图将员工表和部门表连接起来,方便查询员工及其所属部门的信息[^1]。 2. **带有条件过滤的视图** 创建一个视图,仅显示工资高于 5000 的员工信息。 ```sql CREATE VIEW v_high_salary_employees AS SELECT employee_id, name, salary FROM employees WHERE salary > 5000; ``` 3. **使用 WITH CHECK OPTION 的视图** 创建一个视图,并确保通过该视图插入或更新的数据符合视图的定义条件。 ```sql CREATE VIEW v_active_customers AS SELECT customer_id, name, status FROM customers WHERE status = 'active' WITH CHECK OPTION; ``` 4. **视图的查询** 查询视图中的数据与查询普通表类似。 ```sql SELECT * FROM v_employee_departments; ``` #### 四、视图的优势 - **简化复杂查询**:通过视图可以隐藏复杂的 SQL 查询逻辑。 - **数据安全**:视图可以限制用户只能访问特定的数据子集。 - **数据抽象**:视图提供了更高的抽象层次,使得应用程序无需关心底层表结构。 #### 五、注意事项 - 视图本身不存储数据,因此对视图的修改实际上是对基础表的修改。 - 如果基础表被删除或修改,视图可能会失效。 - 使用视图时需要注意性能问题,尤其是当视图涉及复杂查询或大量数据时。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值