• mysql视图


    mysql视图
    视图:view,是一种有结构(有行有列)但没有结果(结构中不真实存放数据)的虚拟表,虚拟表的结构来源不是自己定义的,而是从对应的基表中产生(视图的数据来源)

    创建视图:
    基本语法:create view 视图名字 as select 语句;可以使普通查询、可以使连接查询、可以是联合查询、可以是子查询
    创建单标视图:基表只有一个
    create view my_v1 as
    select * from my_student;

    create view my_v2 as
    select * from my_class;

    创建多表视图:基表来源至少两个(视图中不能有重名字段)
    create view my_v3 as
    select s.*,c.c_name,c.room from my_student as s left join my_class c on s.c_id = c.id;

    查看视图结构:
    视图是一张虚拟表,表的所有查看方式都适用于视图
    show tables[like]/desc 视图名字
    show create tablel 视图名
    视图与表有一个关键字区别,视图view,表tables,查看视图创建语句可以使用view关键字
    查看视图创建语句
    show vreate view my_v3;
    视图一旦创建:系统会在视图对应的数据库文件夹下创建一个对应的结构文件:frm文件

    查询视图内容:
    select * from 视图名
    修改视图
    视图本身不可修改,但是视图来源是可以修改的。
    alter view 视图名字 新的select语句
    alter view my_v1 as
    select * from my_student;
    删除视图
    drop view 视图名字

    视图意义
    1、视图可以节省sql语句,将一条复杂的查询语句使用视图进行保存 ,以后可以直接对视图操作
    2、数据安全:视图操作主要针对查询,如果对视图结构进行处理,不会影响基表数据(相对安全)
    3、视图往往在大项目中使用,而且是多系统使用:可以对外提供有用的数据,但是隐藏关键(无用)的数据,数据安全
    4、视图可以对外提供友好性,不同的数据提供不同的数据,对外好像专门设计
    5、视图可以更好地进行权限控制

    视图数据操作
    视图的确可以进行数据写操作,但是有很过限制
    将数据直接在视图上操作
    新增数据:
    直接对视图进行数据新增
    1、多表数据不能进行新增数据
    2、可以向单表视图插入数据,但是视图中包含的字段必须事基表中所有不能为空(或者没有默认值)字段。
    3、视图是可以向基表插入数据的

    删除数据:
    1.多表视图不能删除视图,单表视图可以删除
    更新数据
    无论单表视图还是多表都可以更新
    update my_v3 set c_id=4 where id =5;
    更新限制:with check option,如果对视图在新增的时候限定了某个字段有限制,那么在对视图进行更新时,系统会进行验证,要保证更新后视图依然
    create view my_v4 as
    select * from my_student where age >30 with check option;
    -- 表示视图的数据来源都是年龄大于30岁:where age>30决定
    -- with check option :决定通过视图更新的时候,不能将已经得到的数据age>30的改成小与30的
    -- 可以修改数据让数据可以查到:可以改,但是无效果,只能操作你能看到的数据
    update my_v4 set age = 32 where id =6;

    视图算法
    系统对视图以及外部查询视图的select语句的一种解析方式
    视图算法分为3中
    undefined:为定义(默认的),这不是一种实际使用算法,是一种推卸责任的算法:告诉系统,视图没有定义算法,系统自己选
    temptable:临时表算法:系统先执行select语句,后执行外部查询语句
    merge:合并算法:系统应该先将视图对应的select语句与外部视图查询的select语句进行合并,然后执行(效率高:常态)

    算法指定:在创建视图时指定
    --指定算法为临时表
    create algorithm=temptable view my_v6 as
    select * from my_student group by id;

    视图算法选择:如果视图的select语句中会包含一个查询子句(五子句),而且很可能书序比外部的查询语句要靠后,一定要使用算法temptable,其他情况可以不用指定(默认即可)

  • 相关阅读:
    [转]Java中fina以及static的意义
    [转]Java中this的意义
    [转]Java中子类调用父类构造方法的问题分析
    [原创]SSH中HibernateTemplate与HibernateDaoSupport关系
    [转]No configuration found for the specified action解决办法
    [原创]MyEclipse2014全手动实现反向工程---解决手动整合ssh时发生的、在hibernate反向工程的时候找不到项目名的问题
    [转]SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)
    pycharm中运行时添加配置 及pytest模式怎么修改为run模式
    字符串正则匹配替换
    PyCharm选中文件夹新建时Directory与Python package的区别
  • 原文地址:https://www.cnblogs.com/qull/p/6582183.html
Copyright © 2020-2023  润新知