zoukankan      html  css  js  c++  java
  • mysql学习之路_视图

    视图

    视图:view是一种有结构的但是没有结构来源的虚拟表,虚拟表的结构来源不是自己定义的而是从对应的基表中产生(来源)

    创建视图

    基本语法:

    Create view 视图名字 as select 语句

    可以是普通查询,也可以是连接查询,联合查询,子查询。

    创建单表视图:

    基表只有一个

    例:create view my_view as select *from my_class;

    创建多表查询

    基表有多个

    查看视图:

    查看视图结构

    视图是一张虚拟表,表的查看方式适用于

    视图:show tables ,desc 表名

           Show create table 表名G

    视图与表还是有一个关键字的区别:view

    查看表(视图)的创建语句的时候可以使用view关键字

    视图一旦创建:系统就会在视图对应的数据库文件夹下创建一个对应的结构文件:frm文件

    使用视图

    使用视图:主要是为了子查询:将视图做为表一样

    查询:视图的执行:其实本质就是执行封装的select语句

    修改视图:

    视图本身不可修改,但是视图的来源可以修改

     修改视图:修改视图本身的来源语句(select 语句)

    Alter view视图名字 as 新的select语句

    例:alter view my_view as select id,name,age,sex from my_stu;

    删除视图

    Drop view 视图名字;

    视图的意义

    1,视图可以节省sql语句:将一条复杂的查询语句使用视图进行保存,以后可以直接对视图进行操作;

    2,数据安全:视图操作是主要针对查询,如果对视图结果进行处理(删除)不会影响基表数据(相对安全)

    3,视图往往是在大型项目中使用,而且是多系统使用,对外提供有效有用的数据隐藏关键(无用的)数据,数据安全。

    4,视图对外提供友好型,不同的视图提供不同的数据,对外好像是专门设计

    5,视图可以更好地进行权限控制

    视图数据操作

    视图可以进行很多数据写操作:但是有限制,将数据直接在视图上进行操作

    新增数据

    数据新增直接对数据进行新增

    1,多表数据不能进行新增操作

    2,可以向单表视图插入数据,但是视图中包含的字段必须有基表所不能为空(或者没有默认值)字段

    3,视图可以向基表插入数据(不应该给权限)

    删除数据

    1,多表视图不能删除数据

    2,单表视图可以删除数据(对基表进行操作)delete from my_view2 where id=2

    更新数据

    理论上单表与多表视图都可以更新数据库

    Update my_view1 set id=3 where id=2;

    更新限制:with check option 如果对视图在新增的时候,限定了某个字段有限制;那么在对视图进行数据更新操作之后,数据依然可以被实体查询出来,否则不更新。

    例:select * from my_stu where age>30 with check option---表视图数据来源年龄不能>30岁,with check option 决定更新的时候不能将age >30改成<30

    视图算法

    系统对视图以及外部查询视图select语句的一种解析方法。

    视图算法有三种

    1,undefind:未定义(默认的),这不是实际使用算法,推卸责任的算法告诉系统,视图没有定义算法,自己看着办吧!

    2,Temptable:临时算法,系统应该先执行视图的select语句,后执行外部查询语句

    3,Merge:合并算法,系统应该先将视图对应的select语句与外部查询视图的select语句进行合并;然后执行(效率高,常态);

    算法指定:创建视图的时候

    Create algorithm =指定算法 view 视图名字 as select 语句;

    视图算法的选择

    如果视图的select语句中包含一个查询子句(五子句???)而且很有肯比外部查询语句要靠后,一定要使用temptable 其他情况不指定。

  • 相关阅读:
    cnetos7设置中文显示及中文输入法
    大数据、云计算和人工智能
    木马可以做什么
    百度搜索语法
    python知识点
    反向代理&集线器和交换机的区别&广播地址&seq与ack的区别
    转台轴承-YRT转台轴承-机床转台轴承选型浅析
    光栅尺与PLC的配合使用
    STM32 keil printf的使用
    keil编写程序完成后debug前面出现绿色框框
  • 原文地址:https://www.cnblogs.com/lqh969696/p/9765549.html
Copyright © 2011-2022 走看看