学习MYSQL笔记分享(四)——视图

/ 0评 / 0

一、视图的概述
视图是由一个或多个表或者视图导出的虚拟表,包含数据行与列。
视图与表的区别:
- 视图是一张虚拟表
- 视图的数据来自定义视图查询引用的真实表,动态生成
- 视图数据存储在引用表中
- 视图是用来查看数据,并不存储数据

视图优点:
- 集中分散数据
- 简化查询语句
- 重用SQL语句
- 保护数据安全
- 共享所需数据
- 更改数据格式
二、创建视图

CREATE [OR REPLACE] VIEW view_name [(column_list)]
AS select statement [WITH CHECK OPTION]
  1. OR PLACE:替换数据库中已有同名视图
  2. view_name:视图名称,数据库中唯一,不能与其他表或视图同名
  3. WITH CHECK OPTION:视图上所进行的修改都需要符合select_statement中所限定的条件
CREATE OR PLACE VIEW mysql_test.customers_view
AS
SELECT * FROM mysql_test.customers
WHERE cust_sex='M'
WITH CHECK OPTION; 
//要求视图包含customers中所有男客户的信息,并且要求保证今后对该视图的修改都必须符合客户性别为男性这个条件

三、删除视图

DROP VIEW [IF EXISTS] view_name...
DROP VIEW IF EXIST content_view;

四、修改视图定义

ALTER VIEW view_name
AS select_statement
=
//先使用DROP VIEW 再使用CREATE VIEW
CREATE OR REPLACE VIEW
ALTER VIEW mysql_test.customers_view
AS
SELECT * FROM mysql_test.customers
WHERE cust_sex='F'
WITH CHECK OPTION; 
//要求视图包含customers中所有女客户的信息,并且要求保证今后对该视图的修改都必须符合客户性别为女性这个条件

五、查看视图定义

SHOW CREATE VIEW view_name;

六、更新视图数据
只有满足可更新条件的视图才能进行更新,需要该视图中的行和基础表的行之间是一对一的关系。
1.使用INSERT语句通过视图向基础表插入数据

INSERT INTO customers_view VALUES(111,'张三','武汉市',NULL);
CREATE VIEW hhh_view AS SELECT * FROM 员工表 WHERE 员工表.性别='女';
//插入新记录:
INSERT INTO hhh_view(姓名,性别,工资) VALUES('张三','男',3000);
//插入操作成功,但不合理
CREATE VIEW hhh_view AS SELECT * FROM 员工表 WHERE 员工表.性别='女' WITH CHECK OPTION;
//插入新纪录:
INSERT INTO hhh_view(姓名,性别,工资) VALUES('张三','男',3000);
//插入操作失败

2.使用UPDATE 语句通过视图修改基础表数据

UPDATE customers_view SET cust_address='上海市';

3.使用DELETE 语句通过视图删除基础表数据

DELETE FROM customers_view
WHERE cust_name='张三';

说明:
1. 创建视图必须有足够访问权限
2. 创建视图的数目没有限制
3. 视可以索引
4. ORDER BY子句可用在视图中
5. 视图不能索引,也不能有关联的触发器,默认值或规则
6. 视图可以和表一起用
7. 部署大量视图前,先进行性能测试

发表评论

电子邮件地址不会被公开。 必填项已用*标注