首页 >数据库 >mysql教程 >MySQL学习笔记之视图_MySQL

MySQL学习笔记之视图_MySQL

WBOY
WBOY原创
2016-05-30 17:11:021083浏览

视图是对磁盘上保存的表数据的抽象,即抽取一个表或多个表的部分行或列的数据,展示给使用者。

 

首先列举下MySQL中最简单的对视图操作的语法:

 

1、创建视图:

 

create view 视图名 as 

    select语句

例如:

create view v_fruit as

    select name,place,weight from t_fruit 

        where weight

据我所知,“as”后面的语句肯定都是以“select”开头的,可以理解成视图的创建结果就是一张新的表格,表格里面有哪些东西呢,就是select语句的结果;另外这张新的“表格”的字段与“select”后面的名字对应,在上例中就是name,place,weight,但是也可以用as或省略as的别名形式,改变新“表格”的字段名,例如:

 

create view v_fruit as

    select name myname,place as myplace,weight from t_fruit 

        where weight

这样,“新表格”的包含的所有字段名就是myname,myplace,weight

 

另外,指定视图的字段名可以不用在select后面加as的方法,直接在“视图名”后面加上“(字段1,字段2,...)”的方法,但是括号里面的个数必须跟实际select出来的字段个数一样

 

例如以下实现一样的字段名设定效果:

 

create view v_fruit(myname,myplace,weight) as

    select name,place,weight from t_fruit 

        where weight

            with check option;

上面的视图是在一张表的基础上创建的,也可以根据多张表连接查询,或者根据其他的视图创建,即"from"后面可以跟表名,也可以跟视图名,但是千万不能跟子查询!

 

例如下面的写法是错的:

 

create view v as

    select id,name,place from (select * from t_fruit)

         where id>3;    

当然,“where”后面跟上子查询是没有问题的。

 

 

 

2、使用视图:

 

视图一旦创建,操作起来就跟表格一样,爱怎么玩就怎么玩,至少你往编辑器里面输语句,肯定不会报错。

 

实际执行阶段就不一样了,对于select from的查询操作,肯定不会出任何问题;但是对于增、删、改,因为视图实际存储的只是定义,这三个操作会改动底下的实际的表格,而你看到的view,里面的数据可能来源于好几个表格,也有可能是通过和、平均数等计算得到的,一旦insert、delete或者update,改动就会特别复杂。为了保险起见,对于一些情况,增删改直接会被MySQL系统判定为误操作,无法成功。这里修改失败的情况特别多,只列举几个,比如改动涉及到两个或两个以上的表会失败,改动后not null的列没有值会失败,view的列值通过sum、count等计算得到的会失败。

 

还有一个问题要注意,如果底下的table的字段发生变动,比如说字段被删除、重命名等,视图操作就很容易出现错误。因为视图在定义时,select后面的字段名就定死了,不会随着表格字段的变动而变动,即使是select *,也会把*直接替换为相应的固定字段。比如一个view里面本来关联了A,B,C三个字段,现在table把字段C重命名为D,那么view对C字段的使用就会出错。

 

 

 

3、修改视图:

 

有两种方法,一种是常规的alter,另一种可以跟创建视图的共用

 

①alter方法,只需把创建时的create改成alter就行,比如:

 

alter view v_fruit as

    select place as myplace,weight from t_fruit 

        where weight

②第1点创建视图里面漏了没说,实际上存在创建和修改视图可以共用的方法:create or replace,只要把create换成这3个单词,其他不要变

 

create or replace view v_fruit as

    select place as myplace,weight from t_fruit 

        where weight

 

 

 4、删除视图:

 

drop view 视图名;

或者

drop view 视图1,视图2,...

如果某个视图不存在,则会报错,但是其他存在的视图会被正常删除。

 

为了防止报错,可以加上“if exists”关键字

 

drop view if exists 视图名;

 

 

5、查看视图各字段的定义:

 

describe 视图名;

或者

desc 视图名;

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn