黑猴子的家:mysql 视图的创建和使用

1、视图总结

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

视图和表的区别
        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;

2、创建视图

CREATE VIEW myv1
AS
SELECT * FROM beauty
WHERE id>3;

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;

4、具备以下特点的视图不允许更新

包含以下关键字的sql语句:分组函数、distinct、group by、having、union 或者 union all
常量视图
Select 中包含子查询
join
from 一个不能更新的视图
where 子句的子查询引用了from 子句中的表

(1)分组函数

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;

(2)常量视图

DROP VIEW myv3;
CREATE VIEW myv3
AS
SELECT 'china' c;

SELECT * FROM myv3;
UPDATE myv3 SET c='Jap';

(3)select中包含子查询

CREATE VIEW myv4
AS
SELECT (
    SELECT MAX(boyfriend_id)
    FROM beauty
)  a;

SELECT * FROM myv4;
UPDATE myv4 SET a=100;

(4)join

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('刘晓婷','刘婷婷');

(5)from一个不能更新的视图

CREATE VIEW myv6
AS
SELECT * FROM myv5;

SELECT * FROM myv6;
INSERT INTO myv6 VALUES('刘晓婷','刘婷婷');

(6)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';
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值