mysql视图学习记录

文章介绍了视图作为数据库中的虚拟表,主要用于简化复杂查询和提供数据安全性。它不存储数据,而是基于基表生成。视图适用于大数据量的场景,可以进行单表和多表查询、数据格式化,并能基于视图创建新的视图。然而,视图的更新和删除操作受到限制,且需随着基表变化进行维护。视图的使用在提升查询效率和数据安全性的同时,也可能增加数据库的维护成本。

1 概念:视图是虚拟的表,本身不存储数据

2 应用场景:表特别多数据量特别大的适用,小项目一般用不到

3 基础语法:

CREATE VIEW (view_name)
AS
SELECT (VALUE1,VALUE2...)
FROM TABLE1
WHERE ...

注意:这里视图创建涉及到的表称为基表,针对视图修改数据会影响基表。

4 创建单表视图

CREATE VIEW v_base
AS
SELECT employee_id, last_name, salary
FROM employees
WHERE department_id = 80;

查询就是select * from v_base;

拓展:重命名

CREATE VIEW v_base2
AS
SELECT employee_id e_id, last_name l_nm, salary
FROM emps
WHERE salary > 5000;

在这里基表的employee_id字段在视图中显示为e_id, last_name显示为l_nm

另一种写法:

CREATE VIEW e_base3(e_id, l_nm, salary)
AS
SELECT employee_id, last_name, salary
FROM emps;

5 视图内添加基表不存在的字段

例子:统计各部门的平均工资运用视图查询

CREATE VIEW e_base4_salary
AS
SELECT department_id, AVG(salary) avg_sal
FROM emps
WHERE department_id IS NOT NULL
GROUP BY department_id;

基表内不存在的avg_sal字段将会显示到视图当中。

6 多表视图

CREATE VIEW v_base_emt
AS
SELECT e.employee_id, e.department_id, d.department_name
FROM emps e JOIN dents d
WHERE e.`department_id` = d.`department_id` # 多表查询定义连接关系的字段

7 使用视图对数据进行格式化

CREATE VIEW vu_emp_dept1
AS
SELECT CONCAT(e.lastname,'(',d.department_name,')') emp_info
FROM emps e JOIN depts d
ON e.`department_id` = d.`department_id`

8 基于视图创建视图

CREATE VIEW v_base4
AS
SELECT employee_id, salary
FROM v_base2;

9 查询视图结构

DESCRIBE v_base

额外的属性信息查询

SHOW TABLE STATUS LIKE v_base

代码最后面添加\G使数据分组可读性提高

详细定义信息则SHOW CREATE  VIEW v_base

10 更新视图数据

UPDATE v_base

SET salary = 10000

WHERE employee_id = 101;#这会导致基表中的数据改变,反之亦然

11 删除视图数据

DELETE  FROM v_base

WHERE employee_id = 101;

注意不能更新的场景!

引用5中的例子AVG(salary),如果

UPDATE e_base4_salary
SET avg_sal = 5000
WHERE department_id = 30;

以及删除操作,都将不被支持在视图中,对于以上的对象。

12 修改视图

方法一:

CREATE OR REPLACE VIEW e_base
(employee_id, last_name, salary, email)
AS
SELECT employee_id, last_name, salary, email
FROM emps
WHERE salary > 7000;

方法2⃣️:

ALTER VIEW e_base
AS
SELECT employee_id, last_name, salary, hire_date
FROM emps;

13 删除视图

DROP VIEW (IF EXISTS)「」

这不会删除基表中的数据,但是将导致以该视图为基表的视图查询失败。

14 总结

将经常使用的查询操作定义为视图,可以简化查询操作,并使存储查询语句而不是数据来减少数据冗余,

更重要的是,

使用视图查询能够提升数据安全,用户将通过加了一层的视图进行数据访问而不再直接访问表。

不足之处,当实际的数据表进行了修改变更,我们需要及时对视图进行维护。

在实际项目中,视图的过多将提升数据库的维护成本。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值