MySQL视图

Posted chromer

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL视图相关的知识,希望对你有一定的参考价值。

1. 创建视图

  1.1 创建视图的语法形式

CREATE [OR REPALCE][ALGORITHM = {UNSIGNED|MERGE|TEMPTABLE}]
VIEW view_name[(column_list)]
AS SELECT_statement
[WITH[CASCADED|LOCAL|CHECK OPTION]]
#CREATE 创建新的视图;
#REPLACE 替换已经创建的视图
#ALGORITHM表示视图选择的算法;
#view_name:视图的名称
#column_list:属性列
#SELECT_statement:SELECT语句
#WITH[CASCADED|LOCAL] CHECK OPTION:视图更新时保证在视图的权限范围之内

  1.2 在单表上创建视图

    例1:在t表格上创建一个名为view_t的视图:

#创建基本表并插入数据
create table t(quantity int,price int);
insert into t values(3,50);

#创建视图语句为:
create view view_t as select quantity,price,quantity*price from t;
quantity price quantity*price
3 50 150

  

  默认情况下创建的视图和基本表的字段是一样的,也可以通过指定视图字段的名称还创建视图。

    例2:在t表格上创建一个名为view_t2的视图:

1 create view view_t2(qty,price,total) as select quantity,price,quantity*price from t;
2 select * from view_t2;

qty  

price total
3 50 150

 

  1.3 在多表上创建视图

    mysql中也可以在两个或者两个以上的表上创建视图,可以使用CREATE VIEW语句实现。

 1 #在表student和表stu_info上创建视图stu_glass,代码如下:
 2 insert into student values(1,wanglin1),(2,gaoli),(3,zhanghai);
 3 insert into stu_info values(1,wuban,henan),(2,liuban,hebei),(3,qiban,shandong);
 4 #创建视图stu_glass,语句如下:
 5 CREATE VIEW stu_glass ( id, name, glass ) AS SELECT
 6 student.s_id,
 7 student.name,
 8 stu_info.glass 
 9 FROM
10     student,
11     stu_info 
12 WHERE
13     student.s_id = stu_info.s_id;
14 #查看视图
15 select * from stu_glass;

    这个例子就解决了刚开始提出的那个问题,通过这个视图可以很好的保护基本表中的数据。这个视图中的信息很简单,只包含了id,姓名和班级,id字段对应student表中的s_id字段,name对应student表中的name字段,glass对应sttu_info表中的glass字段。

 

2. 查看视图

  2.1 DESCRIBE 语句查看视图的基本信息

1 #通过DESCRIBE语句查看视图view_t的定义
2 DESCRIBE view_t;

    结果显示出了视图的字段定义、字段的数据类型、是否为空、是否为主/外键、默认值和额外信息。

    DESCRIBE一般情况下都简写为DESC,输入这个命令的执行结果和输入DESCRIBE的执行结果是一样的。

  2.2 SHOW TABLE STATUS  语句查看视图基本信息

1 #通过SHOW TABLE STATUS命令查看视图信息
2 show table status like view_t;

  2.3 SHOW CREARE VIEW 语句查看视图详细信息

1 #SHOW CREATE VIEW 语句可以查看视图详细定义
2 show create view view_t;

  2.4 在views表中查看视图详细信息

 

1 #在MySQL中,information_schema数据库下的views表中存储了所有视图的定义。通过对views表的查询,可以查看数据库中的所有视图的详细信息,查询语句如下:
2 SELECT * FROM information_schema.VIEWS;

 

3. 修改视图

  3.1 CREATE OR REPLACE VIEW 语句修改视图

1 #MySQL中如果要修改视图,使用CREATE OR REPLACE VIEW语句:
2 CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED|MERGE|TEMPTABLE}]
3 VIEW view_name[(column_list)]
4 AS SELECT_statement
5 [WITH[CASCADED|LOCAL]CHECK OPTION]

  3.2 ALTER 语句修改视图

 

1 ALTER[ALGORITHM = {UNDEFINED|MERGE|TEMPTABLE}]
2 VIEW view_name[(column_list)]
3 AS SELECT_statement
4 [WITH[CASCADED|LOCAL]CHECK OPTION]

 

4. 更新视图

 

#使用UPDATE语句更新视图view_t:
update view_t set quantity = 5;
select * from view_t;
+----------+
| quantity |
+----------+
|        5 |
+----------+
 1 #使用INSERT 语句在基本表t中插入了一条记录:
 2 insert into t values(3,5);
 3 select * from t;
 4 select * from view_t2;
 5 +-----+-------+-------+
 6 | qty | price | total |
 7 +-----+-------+-------+
 8 |   5 |    50 |   250 |
 9 |   3 |     5 |    15 |
10 +-----+-------+-------+
11 2 rows in set (0.02 sec)

  向表t中插入一条记录,通过select查看表t和视图view_t2,可以看到其中的内容也跟着更新,视图更新的不仅仅是数量和单价,总价也会更新。

  

 1 #使用delete语句在删除视图view_t2中的一条记录:
 2 delete from view_t2 where price = 5;
 3 select * from view_t2;
 4 +-----+-------+-------+
 5 | qty | price | total |
 6 +-----+-------+-------+
 7 |   5 |    50 |   250 |
 8 +-----+-------+-------+
 9 1 row in set (0.02 sec)
10 
11 select * from t;
12 +----------+-------+
13 | quantity | price |
14 +----------+-------+
15 |        5 |    50 |
16 +----------+-------+
17 1 row in set (0.03 sec)

5. 删除视图

  当视图不再需要时,可以将其删除,删除一个或多个视图可以使用DROP VIEW语句:

  语法如下:

DROP VIEW[IF EXISTS]
    view_name[,view_name]...
   [RESTRICT|CASCADE]

  例:删除stu_glass视图

1 drop view if exists stu_glass;
2 Query OK, 0 rows affected (0.00 sec)

 

以上是关于MySQL视图的主要内容,如果未能解决你的问题,请参考以下文章

从mysql的片段中加载ListView

回收站视图未显示在片段中

如何从片段内的列表视图打开链接网址?

如何使列表视图出现在片段中?

如何从活动中更改片段中视图的可见性

片段中的网格视图