• 表:存储数据的逻辑单元,以行列形式存在
• 数据字典:系统表,存放数据库相关信息表
• 约束:用于保证数据完整性的规则
• 视图:一个或多个数据表数据的逻辑显示,不存储数据
• 索引:用于提高查询性能
• 存储过程:用于完成一次完整的业务处理,无返回值
• 存储函数:用于完成一个特定计算,具有一个返回值
• 触发器:相当于事件监听器,数据库发生特定事件后,触发器被触发,完成相应的处理
• 视图的作用:节约内存,权限功能(比如针对不同用户制定查询视图)
• 视图是一种虚拟表,本身不具有数据,占用很少的内存空间
• 视图建立在已有表的基础上,这些表叫做基表
• 视图中的增删改查,基表中也会相应变化
• 视图就是 - 存储起来的select语句
• 视图本身的创建与删除不会影响基表
• 视图的应用场景:针对于小型项目,不推荐使用视图。针对于大型项目,可以考虑使用视图
• 视图的优点:简化查询;控制数据的访问;减少数据的冗余
• 视图的不足:数据表中结果变更后,要及时对相关视图进行维护;视图维护复杂,可读性不好,容易变成系统得潜在隐患
• 创建视图
#1.单表
CREATE VIEW employee_vu(last_name,employee_id,department_id)
AS
SELECT last_name,employee_id,department_id
FROM employees;
#2.多表
CREATE VIEW emp_v2
AS
SELECT department_id,m_sal
FROM (
SELECT department_id,MAX(salary) m_sal
FROM emps
WHERE department_id IS NOT NULL
GROUP BY department_id
) t_m_tal
WHERE m_sal > 12000;
• 查看视图
#2. 显示视图的结构
#查看数据库的表对象、视图对象
SHOW TABLES;
#查看视图结构
DESC employee_vu;
#查看视图的属性信息
SHOW TABLE STATUS LIKE 'employee_vu';
#查看视图的详细定义
SHOW CREATE VIEW employee_vu;
• 插入视图数据
INSERT INTO emp_v2(department_id,m_sal)
VALUES(10,9999);
• 修改视图 - create or replace view
#将视图 emp_v1 修改为查询电话号码以‘011’开头的并且邮箱中包含 e 字符的员工姓名和邮箱、电话号码
CREATE OR REPLACE VIEW emp_v1
AS
SELECT last_name,email,phone_number
FROM emps
WHERE phone_number LIKE '011%'
AND email LIKE '%e%';
• 删除视图 - drop view
#删除视图emp_v2 和 emp_v1
DROP VIEW emp_v1;
DROP VIEW emp_v2;
注意:
• 查询语句中字段的别名可以会视图中字段名出现
• 可以在表名后()内确定字段名
• 更新/增删改 视图中的数据:更新视图中的数据,会导致基表中数据的修改;更新表中的数据,也会导致图中的数据的修改
• 更新失败的情况:如果视图中有基表中不存在的字段,就会失败
• 虽然视图能更新数据,但视图主要方便查询,不建议更新。即使要更改数据也会在基表中完成
优点:
减少数据冗余:视图能够存储查询语句,从查询语句获取结果集,减少了冗余数据
数据更为安全:通过将查询的结果集作为视图呈现,对用户实行了访问限制
分解查询逻辑:将复杂的查询逻辑分解,创建多个视图存储结果集,然后结合实现复杂逻辑
缺点:
增加维护成本:基表改变后,视图也要进行相应维护,增加了维护成本