常见的数据库对象
| 对象 |
描述 |
| 表(TABLE) |
表是存储数据的逻辑单元,以行和列的形式存在,列就是字段,行就是记录. |
| 数据字典 |
就是系统表,存在数据库相关信息的表.系统表的数据通常由数据库系统维护,程序员通常不修改,只做查看 |
| 约束(CONSTRAINT) |
执行数据校验的规则,用于保证数据完整性的规则 |
| 视图(VIEW) |
一个或者多个数据表里的数据的逻辑显示,视图并不存储数据 |
| 索引(INDEX) |
用于提高查询性能,相当于书的目录 |
| 存储过程(PROCEDURE) |
用于完成一次完整的业务处理,没有返回值,但可以通过传出参数将多个值传给调用环境 |
| 存储函数(FUNCTION) |
用于完成一次特定的计算,具有一个返回值 |
| 触发器(TRIGGER) |
相当于一个事件监听器,当数据库发生特定事件后,触发器被触发,完成相应的处理 |
视图概述
- 视图是一种虚拟表,本身是不具有数据的,占用很少的内存空间,它是SQL中的一个重要概念.
- 视图建立在已有表的基础上,视图赖以建立的这些表称为基表
- 视图的创建和删除只影响视图本身,不影响对应的基表.但是当对视图中的数据进行增加,删除,修改操作时,数据表中的数据会相应得发生变化,反之亦然.
- 向视图提供数据内容的语句为SELECT语句,可以将试图理解为存储起来的SELECT语句
- 在数据库中,视图不会保存数据,数据真正保存在数据表中,当对视图中的数据进行增加,删除,修改操作时,数据表中的数据会相应得发生变化,反之亦然.
- 视图,是向用户提供基表数据的另一种表现形式,通常情况下,小型项目的数据库可以不使用视图,但是在大型项目中,以及数据表比较复杂的情况下,视图的价值就凸显出来了,他可以帮助我们把经常查询的结果集放在虚拟表中,提升使用效率,理解和使用起来都非常方便.
创建视图
1 2 3 4 5 6 7 8 9 10
| CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}] VIEW 视图名称 [(字段列表)] AS 查询语句 [WITH [CASCADED|LOCAL| CHECK OPTION]
CREATE VIEW 视图名称 AS 查询语句
|
查询视图
1 2 3 4 5 6 7 8 9 10 11 12
| SHOW TABLES;
DESC / DESCRIBE 视图名称;
SHOW TABLE STATUS LIKE '视图名称'\G; # 执行结果显示,注释Commet为VIEW,说明改表为视图,其他信息为NULL,说明这是一个虚表
SHOW CREATE VIEW 视图名称;
|
视图更新数据
MySQL支持使用INSERT,UPDATE,DELETE语句对视图中的数据进行新增,修改和删除等操作.当视图中数据发生变化时,数据表中的数据也会发生变化,反之亦然.
不可更新的视图
要使视图可更新,视图中的行和底层基本表中的行之间必须存在一对一关系,另外当视图定义出现如下情况时,视图不支持更新操作:
- 在定义视图的时候,指定了”ALGORITHM = TEMPTABLE” ,视图将不支持INSET和DELETE操作
- 视图中不包含基表中所有被定义为非空又为指定默认值的列,视图将不支持INSET操作
- 在定义视图的SELECT语句中使用了
JOIN联合查询,视图将不支持INSET和DELETE操作
- 在定义视图的SELECT语句后的字段列表中使用了
数字表达式或者子查询,视图将不支持INSET,也不支持UPDATE使用了数字表达式,子查询的字段值
- 在定义视图的SELECT语句后的字段列表中使用
DISTINCT,聚合函数,GROUP BY,HAVING,UNION等,视图将不支持INSET,UPDATE,DELETE
- 在定义视图的SELECT语句中包含了子查询,而子查询中应用了FROM后面的表,视图将不支持INSET,UPDATE,DELETE
- 视图定义基于一个不可更新的视图
- 常量视图
虽然可以更新视图数据,但总的来说,视图作为一个虚拟表,主要用于方便查询,不建议更新视图的数据,对视图数据的更改,都是通过对实际数据表里的数据操作来完成的
修改,删除视图
修改视图
1 2 3 4 5 6 7 8 9 10
| CREATE OR REPLACE VIEW '视图名称' (字段列表) AS (查询语句); # CREATE VIEW 子句中各列的别名应和子查询中各列相对应
ALTER VIEW 视图名称 AS 查询语句;
|
删除视图
1 2
| DROP VIEW IF EXISTS '视图名称';
|
说明:基于视图a,b创建的视图c,如果将视图a或者视图b删除,会导致视图c的查询失败.这样的视图c需要手动删除或者修改,否则影响使用.
总结
优点
- 操作简单
- 将经常使用的查询操作定义为视图,可以极大简化开发人员对数据库的操作
- 减少数据冗余
- 视图跟实际数据表不一样,它存储的是查询语句.所以,在使用的时候,我们通过定义视图的查询语句来获取结果集.而视图本身不存储数据,不占用数据存储的资源,减少数据冗余
- 数据安全
- MySQL将用户对数据的访问限制在某些数据的结果集上.隔离了真实数据表