视图的创建和使用
视图:基于原始表得到的一个虚拟的查询结果集
视图和表的区别:
- 表中的数据占用物理空间,视图不占用。
- 表中的数据是实际存在的,视图的数据是执行查询时动态生成的
视图的好处:
1、提高查询语句的重用性,调用简单
2、安全
3、独立
视图的应用场景:
1、多个地方用到相同的查询结果
2、查询结果使用了比较复杂的sql语句
一、创建视图:
create [or replace] view 视图名
as
select 语句;
特点:
1、视图的使用和表的使用是一致的,都支持增删改查,而且语法一样
2、如果视图的查询语句中包含一些特殊关键字,则不支持增删改
分组函数、distinct、group by、having、union或者union all
常量视图
Select中包含子查询
join
from一个不能更新的视图
where子句的子查询引用了from子句中的表
二、修改视图
方式1.如果视图存在,则修改;如果视图不存在,则创建
CREATE OR REPLACE VIEW 视图名
AS
新的查询语句
方式2.修改视图
ALTER VIEW 视图名 AS
新的查询语句
三、删除视图
可以同时删除多个视图。
drop view 视图1,视图2;
一、创建视图
CREATE VIEW myv1
AS
SELECT * FROM beauty
WHERE id>3;
二、使用视图
1.查询
SELECT * FROM myv1;
SELECT * FROM beauty;
2.插入
INSERT INTO myv1 VALUES(14,'罗大磊','男','1998-1-1','111',NULL,NULL);
INSERT INTO myv1 VALUES(2,'马小宁','男','1998-1-1','111',NULL,NULL);
3.更新
UPDATE myv1 SET NAME='宋茜' WHERE id=6;
4 .删除
DELETE FROM myv1 WHERE id=14;
具备以下特点的视图不允许更新
/*包含以下关键字的sql语句:分组函数、distinct、group by、having、union或者union all
常量视图
Select中包含子查询
join
from一个不能更新的视图
where子句的子查询引用了from子句中的表
*/
① 关键字
CREATE VIEW myv2
AS
SELECT COUNT(*),boyfriend_id
FROM beauty
GROUP BY boyfriend_id;
SELECT * FROM myv2;
UPDATE myv2 SET boyfriend_id = 10 WHERE boyfriend_id=1;
②常量视图
DROP VIEW myv3;
CREATE VIEW myv3
AS
SELECT 'china' c;
SELECT * FROM myv3;
UPDATE myv3 SET c='Jap';
③select中包含子查询
CREATE VIEW myv4
AS
SELECT (
SELECT MAX(boyfriend_id)
FROM beauty
) a;
SELECT * FROM myv4;
UPDATE myv4 SET a=100;
④join update好用 但是insert 不好用
CREATE VIEW myv5
AS
SELECT NAME,boyname
FROM beauty b
JOIN boys bo ON b.boyfriend_id=bo.id;
SELECT * FROM myv5;
UPDATE myv5 SET NAME='安娜' WHERE NAME='热巴';
INSERT INTO myv5 VALUES('刘晓婷','刘婷婷');
⑤from一个不能更新的视图
CREATE VIEW myv6
AS
SELECT * FROM myv5;
SELECT * FROM myv6;
INSERT INTO myv6 VALUES('刘晓婷','刘婷婷');
#⑥where子句的子查询引用了from子句中的表
CREATE VIEW myv7
AS
SELECT last_name
FROM employees
WHERE manager_id IN(
SELECT employee_id
FROM employees
WHERE last_name LIKE '%a%'
)
SELECT * FROM myv7;
UPDATE myv7 SET last_name='hhhh' WHERE last_name='Hunold';
视图的修改和删除
修改视图
方式一:
CREATE OR REPLACE VIEW myv1
AS
SELECT * FROM beauty;
SELECT * FROM myv1;
方式二:
ALTER VIEW myv1
AS
SELECT id,NAME
FROM beauty;
四、删除视图
#DROP VIEW 视图名1,视图名2,...
DROP VIEW myv1,myv2,myv3,myv4,myv5;
五、查看视图结构
DESC myv1;
SHOW CREATE VIEW myv1;