专注手机网站建设,创建网站大约多少钱2018,哪儿网站建设费用低,旅行社网站策划MySQL—视图的概念与操作
常见的数据库对象
对象描述表(TABLE)表是存储数据的逻辑单元#xff0c;以行和列的形式存在#xff0c;列就是字段#xff0c;行就是记录数据字典就是系统表#xff0c;存放数据库相关信息的表。系统表的数据通常由数据库系统维护#xff0c; 程…MySQL—视图的概念与操作
常见的数据库对象
对象描述表(TABLE)表是存储数据的逻辑单元以行和列的形式存在列就是字段行就是记录数据字典就是系统表存放数据库相关信息的表。系统表的数据通常由数据库系统维护 程序员通常不应该修改只可查看约束 (CONSTRAINT)执行数据校验的规则用于保证数据完整性的规则视图(VIEW)一个或者多个数据表里的数据的逻辑显示视图并不存储数据索引(INDEX)用于提高查询性能相当于书的目录存储过程 (PROCEDURE)用于完成一次完整的业务处理没有返回值但可通过传出参数将多个值传给调 用环境存储函数 (FUNCTION)用于完成一次特定的计算具有一个返回值触发器 (TRIGGER)相当于一个事件监听器当数据库发生特定事件后触发器被触发完成相应的处理
视图的概念
视图是一种 虚拟表 本身是 不具有数据 的占用很少的内存空间它是 SQL 中的一个重要概念。
视图建立在已有表的基础上, 视图赖以建立的这些表称为基表。
视图的创建和删除只影响视图本身不影响对应的基表。但是当对视图中的数据DML进行增加、删除和 修改操作时数据表中的数据会相应地发生变化反之亦然。
视图提供数据内容的语句为 SELECT 语句, 可以将视图理解为存储起来的 SELECT 语句
在数据库中视图不会保存数据数据真正保存在数据表中。当对视图中的数据进行增加、删 除和修改操作时数据表中的数据会相应地发生变化反之亦然。
视图是向用户提供基表数据的另一种表现形式。通常情况下小型项目的数据库可以不使用视 图但是在大型项目中以及数据表比较复杂的情况下视图的价值就凸显出来了它可以帮助我 们把经常查询的结果集放到虚拟表中提升使用效率。理解和使用起来都非常方便。
创建视图
查询语句中字段的别名会作为视图的别名出现
CREATE VIEW vu_emps
AS
SELECT employee_id,last_name,salary
FROM emps;CREATE VIEW vu_emps2(emp_id,name,monthly_sal)
AS
SELECT employee_id,last_name,salary
FROM emps;针对多表的视图创建
CREATE VIEW vu_emp_dept
AS
SELECT employee_id,e.department_id,department_name
FROM emps e JOIN depts d
ON e.department_id d.department_id;SELECT * FROM vu_emp_dept;利用视图对数据进行格式化 CREATE VIEW vu_emp_dept1
AS
SELECT CONCAT(e.last_name,(,d.department_name,)) emp_info
FROM emps e JOIN depts d
ON e.department_id d.department_id;基于视图创建视图
CREATE VIEW vu_emp4
AS
SELECT department_id,department_name FROM vu_emp_dept;SELECT * FROM vu_emp4;查看视图
查看数据库的表对象视图对象
SHOW TABLES;查看数据库结构
DESC vu_emp4;查看数据的属性信息
mysql SHOW TABLE STATUS LIKE vu_emp4\G;
*************************** 1. row ***************************Name: vu_emp4Engine: NULLVersion: NULLRow_format: NULLRows: NULLAvg_row_length: NULLData_length: NULL
Max_data_length: NULLIndex_length: NULLData_free: NULLAuto_increment: NULLCreate_time: NULLUpdate_time: NULLCheck_time: NULLCollation: NULLChecksum: NULLCreate_options: NULLComment: VIEW
1 row in set (0.00 sec)ERROR:
No query specified
查看视图的详细定义信息
mysql SHOW CREATE VIEW vu_emp4\G;
*************************** 1. row ***************************View: vu_emp4Create View: CREATE ALGORITHMUNDEFINED DEFINERroot% SQL SECURITY DEFINER VIEW vu_emp4 AS select vu_emp_dept.department_id AS department_id,vu_emp_dept.department_name AS department_name from vu_emp_dept
character_set_client: utf8
collation_connection: utf8_general_ci
1 row in set (0.00 sec)ERROR:
No query specified
更新视图数据
更新视图中的数据会导致基表中数据的修改
更新表中的数据也会导致视图中的数据的修改
要使视图可更新视图中的行和底层基本表中的行之间必须存在 一对一 的关系。另外当视图定义出现如下情况时视图不支持更新操作
在定义视图的时候指定了“ALGORITHM TEMPTABLE”视图将不支持INSERT和DELETE操作视图中不包含基表中所有被定义为非空又未指定默认值的列视图将不支持INSERT操作在定义视图的SELECT语句中使用了 JOIN联合查询 视图将不支持INSERT和DELETE操作在定义视图的SELECT语句后的字段列表中使用了 数学表达式 或 子查询 视图将不支持INSERT也 不支持UPDATE使用了数学表达式、子查询的字段值在定义视图的SELECT语句后的字段列表中使用 DISTINCT 、 聚合函数 、 GROUP BY 、 HAVING 、 UNION 等视图将不支持INSERT、UPDATE、DELETE在定义视图的SELECT语句中包含了子查询而子查询中引用了FROM后面的表视图将不支持 INSERT、UPDATE、DELETE视图定义基于一个 不可更新视图 常量视图。 虽然可以更新视图数据但总的来说视图作为虚拟表 主要用于方便查询 不建议更新视图的数据。对视图数据的更改都是通过对实际数据表里数据的操作来完成的。 修改视图
方式1使用CREATE OR REPLACE VIEW 子句修改视图
CREATE OR REPLACE VIEW empvu80
(id_number, name, sal, department_id)
AS
SELECT employee_id, first_name || || last_name, salary, department_id
FROM employees
WHERE department_id 80;CREATE OR REPLACE VIEW vu_emp4
AS
SELECT CONCAT(e.last_name,(,d.department_name,)) emp_info
FROM emps e JOIN depts d
ON e.department_id d.department_id;说明CREATE VIEW 子句中各列的别名应和子查询中各列相对应。 方式2ALTER VIEW
修改视图的语法是
ALTER VIEW 视图名称
AS
查询语句ALTER VIEW vu_emp4
AS
SELECT CONCAT(e.last_name,(,d.department_name,)) emp_info
FROM emps e JOIN depts d
ON e.department_id d.department_id;删除视图
DROP VIEW vu_emp4;
DROP VIEW IF EXISTS vu_emp1;视图的优缺点
优点
操作简单减少数据冗余数据安全适应灵活多变的需求能够分解复杂的查询逻辑
缺点
维护成本高可读性不好