数据库——视图

创建视图(基于SELECT语句和已经存在的数据表):

   CREATE [or replace] [algorithm = {undefined | merge | temptable}]

  VIEW view_name [(column_list)]

  AS SELECT_statement

  [WITH [CASCADED | LOCAL ] CHECK OPTION]

# 在单表上创建视图

  例:在student表上创建视图view_stu

      create view view_stu as select math,chinese,math+chinese from student;

       ==   create view view_stu(math,chinese,sum) as select math,chinese,math+chinese from student;   (其中  sum = math+chinese)

#在多表上创建视图

  例:在student 表和stu_info 表上创建 stu_class 视图,查询出s_id 号、姓名和班级

      create view stu_class(id,name,glass)

      as

      select student.s_id,student.name,stu_info.class

      from student,stu_info

      where student.s_id=stu_info.s_id;

查看视图(查看数据):

1、使用describe语句(该语句可以查看视图的字段信息,其中包括字段名、字段类型等信息)

    describe 视图名;

2、使用show table status语句(该语句可以查看视图的基本信息)

    show table status like '视图名'                      (可以加 \G 是结果看起来更清晰)

  注:表的说明(comment)项的值为view,说明所查的表是一个视图,存储引擎、数据长度等信息都显示为null,说明视图时虚拟表

   如果comment项没有信息,说明这个表不是视图,这是视图和普通表之间最直接的区别、

3、使用show create view语句(该语句不仅可以查看创建视图时的定义语句,还可以查看视图的字符编码)

    show create view 视图名;

 修改视图(修改视图中存在的定义)

1、使用 create or replace view 语句(如果修改的视图存在,那么将使用修改语句对视图进行修改,如果视图存在,那么将创建一个视图)

    create [or replace] [algorithe = {undefiend | merge | temptable}]

    view view_name [(column_list)]

    as select_statement

    [with[cascaded | local] check option]

  例:修改view_stu视图

    create or replace view as select * from student;

    这样view_stu 视图修改后的字段信息和student 表中的字段信息完全一样了

2、使用 alter 语句

    alter [algorithe = {undefiend | merge | temptable}]

    view view_name  [(column_list)]

    as select_statement

    [with[cascaded | local] check option]

  例:修改view_stu表

    alter view view_stu as select student from student;

    (view_stu 代表要修改的视图名,student表示student表中的chinese字段,student表示基本表表名)

更新视图

1、使用update语句(对视图中原有的数据进行更新)

  例:更新view_stu 视图中chinese字段对应的数据值,将字段值改为100

    update view_stu set chinese = 100;

2、使用insert语句(可以向表中插入一条数据)

  例:向student表中插入一条数据,其中s_id 字段的值为4,name字段的值为"Lily",math字段的值为100,chinese字段的值为100

    insert into student values(4,'Lily',100,100);

  注:当基本表中的数据发生变化之后,与基本表对应的视图数据也会一同改变。

3、使用delete语句(可以删除视图中的部分记录)

  例:在view_stu2视图中删除一条记录

    delete from view_stu2 where math = 70;

注:当视图中包含如下内容时,视图的更新操作将不会被执行

  1、视图中包含基本表中被定义为非空的列

  2、在定义视图的select语句后的字段列表中使用了数学表达式

  3、在定义视图的select语句后的字段列表中使用了聚合函数

  4、在定义了视图select语句中使用了distinct,union,top,group by 或 having 子句

删除视图(只能删除视图的定义,不会删除数据,必须拥有drop权限)

  drop view [if exists] view_name [,view_name]···[restrict | cascade]

  例:删除view_stu2视图

    drop view if exists view_stu2;

posted @ 2020-12-21 14:44  xfx#n  阅读(573)  评论(0)    收藏  举报