MySQL视图view的使用

MySQL支持视图功能,包括可更新的视图。视图可理解为一个虚拟表,作用与真实表一样,在逻辑上可以把视图当作一个真实表使用,视图内部包含了真正的查询语句,这个查询语句可以非常复杂,但是用户并不关心这个查询语句,用户只需要查询视图,就能返回想要的数据。

1. 视图优缺点

1.1. 优点
  • 简化用户的使用,复杂性隐藏在内部
  • 安全性,用户只能查询或修改他们所能见到的数据
  • 逻辑独立,能够屏蔽表结构变化带来的影响
1.2 缺点
  • 性能较差,简单的查询也会变得比较复杂
  • 修改不方便,复杂的视图很难维护

2. 创建视图

创建视图语法:

CREATE
    [OR REPLACE]
    [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
    [DEFINER = user]
    [SQL SECURITY { DEFINER | INVOKER }]
    VIEW view_name [(column_list)]
    AS select_statement
    [WITH [CASCADED | LOCAL] CHECK OPTION]

create view创建一个新的视图,或者使用replace view 替换(修改)一个已存在的视图。

  • view_name,视图名称。
  • select_statement,一个select语句,用来提供视图的定义,视图中的数据由这个select语句提供。

示例:
create view v_tb as select * from tb;

  • 视图位于schema命名空间,在一个数据库里,视图的名称必须唯一。
  • 创建视图需要有CREATE VIEW权限以及SELECT语句中对涉及到的表的访问权限。如果使用REPLACE VIEW,需要有DROP权限。
  • 视图一旦创建好,那么它的状态就是固定的,不会因为后来表的定义修改而改变。比如视图的select_statement为select * from t; 如果表t增加了一个新的字段,视图中不会新增该字段。同样如果表t删除了一个字段,查询视图则会报错。

3. 查看视图

3.1 查看数据库中有哪些视图

select * from information_schema.views where table_schema='db_name'\G

3.2 查看视图定义

show create view view_name\G
或者
show create table view_name\G

3.3 删除视图

语法:

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

比如:
drop view view_tb;

4. 视图使用案例

表t为商品表,记录数量和单价,创建一个视图,在获取数量和单价的基础上,计算总价。如下:

mysql> CREATE TABLE t (qty INT, price INT);
mysql> INSERT INTO t VALUES(3, 50);
mysql> CREATE VIEW v AS SELECT qty, price, qty*price AS value FROM t;
mysql> SELECT * FROM v;
+------+-------+-------+
| qty  | price | value |
+------+-------+-------+
|    3 |    50 |   150 |
+------+-------+-------+

5. 视图使用的一些限制

  • 视图select语句不能引用系统变量或者用户自定义的变量。
  • 在存储过程内部,视图select语句不能引用存储过程函数的参数和局部变量。
  • 视图select语句不能引用预编译参数。
  • 视图中引用的表或者视图必须存在,否则查询视图时将报错。
  • 视图不能引用临时表,因此也不能创建一个临时视图。
  • 不能为视图关联触发器。
  • 视图select语句中字段别名最大64个字符,而不是256。

文章评论

0条评论