mysql视图

1.什么是视图
              视图(view):用一个或多个基础表根据用户需要而做成一个虚拟表,但却具有很高实用性的一个特性。在mysql5.0以后集成。
              需要理解的是:
                        A.视图是虚表,它在存储时只存储视图的查询定义,而没有存储对应的数据
            B. 视图中的行和列数据来自由定义视图的查询所引用的表,在引用视图时动态生成
            C.视图的作用相当于从基础表中筛选有用的数据
      2.视图与普通查询的区别:
              视图和查询都是用由sql语句组成,这是他们相同的地方,但是视图和查询有着本质区别:
                        A.存储上的区别:  视图属于数据库 的一部分,而查询没有这个限制
            B.更新限制的要求不一样,虽然通过视图可以间接的更新表数据,但视图要比update限制更加严格
            C.排序结果:通过sql语句,可以对一个表进行排序,而视图则不行,比如order by
      3.视图的优点:
                  A.筛选数据:
                通过select和where来定义视图,从而可以分割数据基表中某些对于用户不关心的数据,使用户把注意力集中到所关心的数据列.
           B.为数据提供一定的逻辑独立性:
                如果为某一个基表定义一个视图,即使以后基本表的内容的发生改变了也不会影响“视图定义”所得到的数据
           C.提供自动的安全保护功能:
                视图能像基本表一样授予或撤消访问许可权.
           D.视图可以间接对表进行更新,因此视图的更新就是表的更新
      4. 创建视图—— CREATE VIEW
    
CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
    VIEW [db_name.]view_name [(column_list)]
    AS select_statement
    [WITH [CASCADED | LOCAL] CHECK OPTION]
   

通过该语句可以创建视图,若给定了[OR REPLACE],则表示当已具有同名的视图时,将覆盖原视图。select_statement是一个查询语句,这个查询语句可从表或其它的视图中查询。视图属于数据库,因此需要指定数据库的名称,若未指定时,表示在当前的数据库创建新视图。

表和数据库共享数据库中相同的名称空间,因此,数据库不能包含相同名称的表和视图,并且,视图的列名也不能重复。

Eg. 本例创建一个产品表(product)和一个购买记录表(purchase),再通过视图purchase_detail查询出购买的详细信息。

CREATE TABLE product

(

        product_id INT NOT NULL,

    name VARCHAR(50) NOT NULL,

    price DOUBLE NOT NULL

);

INSERT INTO product VALUES(1, 'apple ', 5.5);

CREATE TABLE purchase

(

        id INT NOT NULL,

    product_id INT NOT NULL,

    qty INT NOT NULL DEFAULT 0,

    gen_time DATETIME NOT NULL

);

INSERT INTO purchase VALUES(1, 1, 10, NOW());

CREATE VIEW purchase_detail AS SELECT product.name as name, product .price as price, purchase.qty as qty, product .price * purchase.qty as total_value from product, purchase where product.product_id = purchase.product_id;

创建成功后,输入:SELECT * FROM purchase_detail;

运行效果如下:

+-------+-------+-----+-------------+

| name | price | qty | total_value |

+-------+-------+-----+-------------+

| apple |   5.5 | 10 |          55 |

+-------+-------+-----+-------------+

1 row in set (0.01 sec)

创建视图存在如下注意事项:

(1)       运行创建视图的语句需要用户具有创建视图(CRATE VIEW)的权限,若加了[OR REPLACE]时,还需要用户具有删除视图(DROP VIEW)的权限;

(2)       SELECT语句不能包含FROM子句中的子查询;

(3)       SELECT语句不能引用系统或用户变量;

(4)       SELECT语句不能引用预处理语句参数;

(5)       在存储子程序内,定义不能引用子程序参数或局部变量;

(6)       在定义中引用的表或视图必须存在。但是,创建了视图后,能够舍弃定义引用的表或视图。要想检查视图定义是否存在这类问题,可使用CHECK TABLE语句;

(7)       在定义中不能引用TEMPORARY表,不能创建TEMPORARY视图;

(8)       在视图定义中命名的表必须已存在;

(9)       不能将触发程序与视图关联在一起;

(10)   在视图定义中允许使用ORDER BY,但是,如果从特定视图进行了选择,而该视图使用了具有自己ORDER BY的语句,它将被忽略。

5. 修改视图——ALTER VIEW

ALTER [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]

    VIEW view_name [(column_list)]
    AS select_statement
    [WITH [CASCADED | LOCAL] CHECK OPTION]

该语句用于更改已有视图的定义。其语法与CREATE VIEW类似。

Eg. 将上一小节中中创建的视purchase_detail进行修改,去掉qty列,语句如下:

ALTER VIEW purchase_detail AS SELECT product.name as name, product .price as price, product .price * purchase.qty as total_value from product, purchase where product.product_id = purchase.product_id;

此时通过语句:select * from purchase_detail;对视图进行查询时,结果如下:

+-------+-------+-------------+

| name | price | total_value |

+-------+-------+-------------+

| apple |   5.5 |          55 |

+-------+-------+-------------+

  注意事项

修改视图的注意事项除了第一条外跟创建视图的注意事项是一样的。第(1)条应改为:

该语句需要具有针对视图的CREATE VIEWDROP权限,也需要针对SELECT语句中引用的每一列的某些权限。

6. 删除视图——DROP VIEW

    DROP VIEW [IF EXISTS]
    view_name [, view_name] ...
    [RESTRICT | CASCADE]

该语句用户删除视图,可一次删除多个视图。[IF EXISTS]选项确保语句正确运行。若没有该子句,当指定的视图不存在时,将发生错误。

Eg1. 删除视图purchase_detailDROP VIEW purchase_detail;

Eg2. 删除一个未知的视图:DROP VIEW IF EXISTS test_view;

Eg3. 删除多个视图:DROP VIEW IF EXISTS test_view1, test_view2;

注意事项

必须对要删除的一个或多个视图拥有DROP VIEW的权限。

7.查看视图 -- SHOW CREATE VIEW

 SHOW CREATE VIEW view_name

     该语句给出了1个创建给定视图的CREATE VIEW语句。

     mysql> SHOW CREATE VIEW v;
     +------+----------------------------------------------------+
     | View | Create View                                        |
     +------+----------------------------------------------------+
     | v    | CREATE VIEW `test`.`v` AS select 1 AS `a`,2 AS `b` |
     +------+----------------------------------------------------+
  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值