zoukankan      html  css  js  c++  java
  • 第四章 视图

    创建视图

    语法形式:

    create [algorithm = {undefined|merge|temptable}] view 视图名 [(属性清单)] as select语句 [with [cascaded|local] check option]

       

       

    1.algorithm 可选参数,表示视图选择的算法

    undefined表示自动选择

    merge表示将使用视图的语句与视图定义合并起来,使得视图定义的某一部分吧取代语句的对应部分。

    temptable表示将视图的结果存入临时表,然后使用临时表执行语句。

    2.cascaded 表示更新视图需要满足所有相关视图和表的条件

    3.local 表示更新视图时,要满足视图本身的定义条件即可

       

    注:

    创建视图最好加上with check option 参数,而且加上cascaded参数,这样,从视图派生的新视图更新时需要考虑父视图的约束条件,保证数据安全

       

       

    查询创建视图权限:

    select select_priv,create_view_priv from mysql.user where user='用户名';

       

    创建两张表

    创建视图前先创建两张表departmentworker

       

    mysql> create table department(

    d_id int(4) primary key,

    d_name varchar(20) not null unique,

    function varchar(50),

    address varchar(50));

       

       

    mysql> create table worker(

    num int(10) primary key,

    d_id int(4) not null,

    name varchar(20),

    sex varchar(4) not null,

    birthday datetime,

    homeaddress varchar(50),

    constraint w_fk foreign key (d_id) references department(d_id));

       

       

    在单表上创建视图

    mysql> create view department_view1 as select * from department;

       

    使用desc查看视图结构:

    mysql> desc department_view1;

       

    在未指定视图的属性列表时,视图的属性名与select语句查询的属性名相同

       

    mysql> create view department_view2(name,function,location) as select

    -> d_name,function,address from department;

       

       

       

    在多表上创建视图

    mysql> create algorithm=merge view worker_view1(name,department,sex,age,address)

    -> as select name,department.d_name,sex,2016-birthday,address

    -> from worker,department where worker.d_id=department.d_id

    -> with local check option;

       

    注:2016-birthday表示获取的birthday,再用2016去减,得到的结果就是age

       

       

    查看视图

    1.describe语句查看简单视图

    describe 视图名;

       

    也可以使用一些缩写:

    desc 视图名;

       

    2.show table status语句查看视图基本信息

       

       

    3.show create view查看详细信息

       

       

    4.在views表查看视图

       

       

     

    修改视图

    1.create or replace

    语法形式:

    create or replace [algorithm = {undefined|merge|temptable}] view 视图名 [(属性清单)] as select语句 [with [cascaded|local] check option]

       

    若不存在则创建视图

       

    2.alter

    alter [algorithm = {undefined|merge|temptable}] view 视图名 [(属性清单)] as select语句 [with [cascaded|local] check option]

       

       

    更新视图

    查看原表内容:

       

       

    先创建待更新的视图

    mysql> create view department_view3(name,function,address)

    -> as select d_name,function,address from department where d_id=1001;

       

       

    向该视图更新一条记录

       

    mysql> update department_view3 set name='人事部',function='管理人事变动',address='2#5f';

       

       

    虽然更新的是视图,但实际更新的是表department

       

    注:以下情况不能更新视图

    (1)包含count(),sum(),max(),min()函数

    create view worker_view4(name,sex,total) as select name,sex,count(name) from worker;

       

    (2)视图中包含union,union all,distinct,group by,havig等 关键字

    create view worker_view5(name,sex,address) as select name,sex,homeaddress from worker group by d_id;

       

    (3)常量视图

    create view worker_view6 as select 'tom' as name;

       

    (4)视图中的select包含子查询

    create view worker_view7 (name) as select (select name from worker);

       

    (5)由不可更新的视图导出的视图

       

    (6) algorithm为temptable类型时,视图不可更新

       

    (7) 视图对应的表存在没有默认值的列,且该列不再视图中。

    当视图更新时,这样的列没有值插入,也没有null值插入,这是不允许的。

       

    注:最好将视图表作为查询表,而不做更新操作

       

       

       

    删除视图

    drop view [if exists] 视图名列表 [restrict|cascade]

     

  • 相关阅读:
    记一次生产环境Nginx间歇性502的事故分析过程
    如何为nginx配置https(免费证书)
    nginx + tomcat配置https的两种方法
    证书之间的转换(crt pem key)
    FreeSwitch: ESL Inbound内联模式下如何设置单腿变量
    CompletableFuture笔记
    java中整数常量池(-128~127)上限如何调整?
    redis过期机制及注意事项
    一次完整的通话过程SIP报文分析
    SIPp测试freeswitch用户注册
  • 原文地址:https://www.cnblogs.com/wuchaodzxx/p/5524919.html
Copyright © 2011-2022 走看看