zoukankan      html  css  js  c++  java
  • mysql中的view(虚拟表)

    视图是从一个或多个表/视图中导出来的虚拟表。mysql支持可更新的视图。

    1 创建

        CREATE
        [OR REPLACE]  ##使用这个选项,若视图已存在,则等图create,若视图不存在,则等同alter
        [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
        [DEFINER = { user | CURRENT_USER }]
        [SQL SECURITY { DEFINER | INVOKER }]
        VIEW view_name [(column_list)]
        AS select_statement
        [WITH [CASCADED | LOCAL] CHECK OPTION]
    

    注意事项:
    a 在同一个数据库中,视图和表拥有同一个namespace,因此不能有相同的名字。
    b select语句中不能含有子查询
    c select语句中不能涉及系统变量和用户自定义变量
    d 如果有存储过程,函数,定时器等等,select语句中不能有他们的参数
    e select中不能有prepared语句的参数
    f 创建时所涉及的表和列必须存在,如果后来某些表或者列被删除,使用这个视图时会报错
    g 创建时不能涉及临时表,也不能创建‘临时视图’
    h 不能关联触发器。 因此information_schema和performance_schema中的表都不能与触发器关联。
    i select语句中的别名不能超过列的最大长度(64个字母),而非一般别名最大长度(256字母)。
    j 创建时允许在select中添加order by语句,不过如果是从含有order by语句的视图中选取的列,此时添加的order by语句会被自动忽略。
    示例:

        CREATE VIEW v AS SELECT qty, price, qty*price AS value FROM t;
    

    2 查看

        DESCRIBE 视图名;
        或者:
        SHOW TABLE STATUS LIKE '视图名';
        或者:
        SHOW CREATE VIEW 视图名;
        或者:
        SELECT * FROM information_schema.views;
    

    3 修改

        create or replace语句(如1中所言)
        或者alter语句:
        ALTER
            [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
            [DEFINER = { user | CURRENT_USER }]
            [SQL SECURITY { DEFINER | INVOKER }]
            VIEW view_name [(column_list)]
            AS select_statement
            [WITH [CASCADED | LOCAL] CHECK OPTION]
    

    4 更新

    视图为虚拟表,没有数据。在视图中添加,修改,删除数据实际上是在其原始表中进行的。因此视图并不会对性能有太大影响。但是在某些情形下,视图是不能更新的:
    a 含有聚合函数
    b distinct
    c group by
    d having
    e union 或者union all
    f 含有子查询
    g 有join等语句(联表查询)
    h 涉及其他不可更新视图
    i 只含有不含表信息的参数
    j ALGORITHM = TEMPTABLE
    k 对表中的某行多次引用

    5 删除

        DROP VIEW [IF EXISTS]
            view_name [, view_name] ...
            [RESTRICT | CASCADE]
    
  • 相关阅读:
    dataset的transformations-变形记
    创建dataset的方法
    Codeforces Round #479 (Div. 3) D. Divide by three, multiply by two
    Codeforces Round #479 (Div. 3) C. Less or Equal
    Codeforces Round #479 (Div. 3) B. Two-gram
    Codeforces Round #479 (Div. 3) A. Wrong Subtraction
    GlitchBot -HZNU寒假集训
    Floyd 算法求多源最短路径
    dijkstra算法:寻找到全图各点的最短路径
    Wooden Sticks -HZNU寒假集训
  • 原文地址:https://www.cnblogs.com/noway-neway/p/5218791.html
Copyright © 2011-2022 走看看