自学Mysql -- 视图

视图知识点

个人的一些学习总结,各位大牛给指正指正。

什么是视图?
视图实际上就是一张虚拟表,可以和普通表一样使用,但是视图中不存数据,而且视图中的数据是虚拟存储的,来源于实际表。
大型企业开发要求:再简单的查询也要通过视图查询。

视图的优点:
①节省SQL语句。
②数据安全。

一·视图的创建
语法:
/*
create view 视图名
as
查询语句
*/

# 范例1:查询员工姓名中带a字符的员工名,部门名和工种信息
#使用了员工表,部门表,工总表
CREATE VIEW myv1
AS
	SELECT a.last_name,b.`department_name`,a.`job_id`,c.`job_title`
	FROM employees a,departments b ,jobs c
	WHERE a.`department_id` = b.`department_id` 
	AND a.`job_id` = c.`job_id` AND last_name LIKE '%A%';

二、使用视图(查看视图中的数据)

select * from myv1;

三、视图的修改
①方式一:如果视图名称不存在则创建,存在则修改。

/*
	create or replace view 视图名称 
	as
		查询语句
*/
#范例:修改视图myv1
create or replace view myv1
as 
	select * from employees;

②方式二:修改视图,如果视图名称不存在,则报错。

/* alter view 视图名
	as
		查询语句
*/
#范例:修改视图myv1
alter view myv1
as 
	select * from employees;

四、视图的删除

#格式:drop view 视图名称1,视图名称2,...

#范例:删除视图myv1
	drop view myv1;
#范例2:删除多个视图
	drop view myv1,myv2,myv3;

五、查看视图

#查看视图结构
	desc myv1;
#可以看到所创建视图的详细信息
	show create view myv1;

六、视图的更新(视图数据的更新)
#对视图的更新最终会转换成对基本表的更新。
对视图的更新最终会转换成对基本表的更新

#根据boys表创建视图boys_v
create view boys_v
as 
	select * from boys;
#新增数据 -》新增到基表
insert into boys_v(boyname,usercp) values('小明',1000);

#修改数据 -》修改基表的数据
update boys_v set usercp = 1 where boysname = '小明';
#删除数据 -》删除基表数据
delete from boys_v where boyname = '小明';

具备以下条件的视图不允许更新
1、视图创建过程中的SQL语句包含:分组函数、distinct、group by、having、union、union all。
2、select中包含子查询的视图、常量视图、多表连接、select后面的from是一个不可以修改的视图,where子句中引用了form子句中的表。

CREATE VIEW dept_avg_salary_v 
AS
	SELECT AVG(salary) avg_salary,department_id
	FROM employees 
	GROUP BY department_id;
INSERT INTO dept_avg_salary_v (avg_salary,department_id)
VALUES(10000,60);
/*
	创建视图的过程中sql语句包含了分组函数 AVG()、group by,导致添加数据失败,出现以下错误。
	#The target table dept_avg_salary_v of the INSERT is not insertable-into
*/
#where 字句中引用了form子句中的表
CREATE VIEW myv5 AS
	SELECT * FROM employees 
	WHERE employee_id NOT IN(
						SELECT employee_id 
						FROM employees 
						WHERE department_id IS NULL
	);

总结(区别):

视图
create viewcreate table
只保存了sql的逻辑,没有保存数据既保存了SQL逻辑,又保存了数据
基本只用于查询增删改查
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值