MySQL-视图

视图是数据库中的虚拟表,基于查询结果,提供数据的抽象和安全访问层。它可以简化复杂的SQL查询,提高代码重用,通过关联多表提供汇总数据,并能限制用户对特定数据的访问,增强安全性。创建和修改视图涉及SQL语句,如CREATEVIEW和ALTERVIEW,而删除视图则用DROPVIEW。视图不支持索引和触发器,但可以与实际表一起使用。

定义和理解:

视图是虚拟的表,与包含数据的表不同,视图只包含使用时动态检索数据的查询,主要是用于查询。
(从一个表或多个表导出来的一个新的表,但不是真是的表,是虚拟存在的。)

(个人理解:一个年级每个班抽取成绩前5名出来竞赛,那么每个班的这5名同学就要单独拿出来做成一张虚拟的表,就是视图。竞赛完成后还要回归班级。)

创建视图的规则:

  • - 与表一样,视图必须唯一命名; - 可以创建任意多的视图;
  • -为了创建视图,必须具有足够的访问权限。这些限制通常由数据库管理人员授予。
  • -视图中检索数据的查询来构造一个视图。
  • - Order by 可以在视图中使用,但如果从该视图检索数据select中也是含有order by,那么该视图的order by 将被覆盖。
  • -视图不能索引,也不能有关联的触发器或默认值 - 视图可以和表一起使用

创建视图:

create or replace view viewName[(columnList)] as select statement;
			eg: create view view_student as select id,name,class,sex from student;

修改视图::

 update view_student set name= '小王' where name = '王'

查找数据:

select * from view_student;

在多张表上创建视图:

 create view view_student_teacher as select class.id as teacher_id,teacher,class,student.name,student.sex from class
left join student on class.id = student.class_id;

查看视图:

DESCRIBE | DESC viewname;			

修改视图:

alter view view_student_teacher as  select teacher,class,name,sex from class 
 left join student on class.id = statement.class_id;

删除视图:

drop view view_student_teacher			

视图的作用:
1、提高重用性,减少复杂sql使用频次。
如果想获取两张表:用户和产品表的详细信息,正常表查询要做表关联: select a.name as username ,b.name as goodname from user a,goods b where a.userid = b.goodId, 效率很低
如果使用视图: create view user_goods as select a.name as username ,b.name as goodsname from user as a ,goods as b,where a.userid = b.goodsid;
后续查询只需要执行 select * from user_goods
2、重构数据库,可以对不同数据表进行关联。

3、提高安全性,有选择的对数据库进行查询处理。可以给用户授予表的特定部分的访问权限而不是整个表的访问权限。
比如user表有 name,age,sex 三个字段,但是对于用户A只允许查看name和age,不允许查看sex,那么就可以创建视图:
create view canRead as select a.name,a.age from user as a;
那用户select * from canRead 则只能查询到 name和age 两个字段。

### 关于头歌平台 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 查询逻辑。 - **数据安全**:视图可以限制用户只能访问特定的数据子集。 - **数据抽象**:视图提供了更高的抽象层次,使得应用程序无需关心底层表结构。 #### 五、注意事项 - 视图本身不存储数据,因此对视图的修改实际上是对基础表的修改。 - 如果基础表被删除或修改,视图可能会失效。 - 使用视图时需要注意性能问题,尤其是当视图涉及复杂查询或大量数据时。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wáng bēn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值