MySQL视图学习



#视图

/*

视图:基于原始表得到的一个虚拟的查询结果集

视图和表的区别:

1. 表中的数据占用物理空间,视图不占用。

2. 表中的数据是实际存在的,视图的数据是执行查询时动态生成的

 

视图的好处:

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';

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值