八、视图

含义

虚拟表,和普通表一样使用。Mysql 5.1版本出的新特性,通过普通表动态生成的数据,只保存了sql逻辑,不保存查询结果。

应用场景

  • 多个地方用到用样的查询结果
  • 该查询结果使用的 sql 比较复杂

简单示例

mysql> select * from account;
+----+----------+---------+
| id | username | balance |
+----+----------+---------+
|  2 | 哈哈哈   |    1000 |
|  3 | 嘿嘿和   |    2000 |
|  4 | 嘻嘻嘻   |    1000 |
|  5 | 拉拉阿拉 |       1 |
|  6 | 哇哇哇   |     545 |
+----+----------+---------+
5 rows in set (0.06 sec)

mysql> SELECT * FROM `account` where username like '%哈%';
+----+----------+---------+
| id | username | balance |
+----+----------+---------+
|  2 | 哈哈哈   |    1000 |
+----+----------+---------+
1 row in set (0.06 sec)

mysql> create view select_like_username as (SELECT * FROM `account` where username like '%哈%');
Query OK, 0 rows affected (0.01 sec)
mysql> select * from select_like_username where username like '%哈%';
+----+----------+---------+
| id | username | balance |
+----+----------+---------+
|  2 | 哈哈哈   |    1000 |
+----+----------+---------+
1 row in set (0.07 sec)

视图好处

  • 重用sql语句
  • 简化复杂的sql操作,不许知道它的查询细节
  • 保护数据,提高安全性

视图的修改

方式一

​ create or replace view 视图名 as 查询语句;

方式二

​ alter view 视图名 as 查询语句;

视图的删除

语法

​ drop view 视图名,视图名,.........; # 可删除多个

查看视图

语法

​ desc 视图名;

​ show create view 视图名;

视图的更新

语法

# 创建视图
create or replace view select_all_account as (SELECT * FROM `account`);
# 查看
select * from select_all_account;
# 插入
insert into select_all_account values(null,'张飞',111);
# 修改
update select_all_account set username = '关云长' where id = 7;
# 删除
delete from select_all_account where id = 7;

视图的可更新性和视图中查询的定义有关系,以下类型的视图是不能更新的

  • 包含以下关键字的 sql 语句:分组函数、distinct、group by、having、union或者union all
  • 常量视图
  • Select中包含子查询
  • jion
  • from一个不能更新的视图
  • where子句的子查询引用了from子句中的表

视图和表的对比

创建语法的关键字 是否占用物理内存 使用
视图 create view 几乎不占用,保存了 sql 逻辑 增删改查
create table 占用,保存了数据 增删改查
posted @ 2019-09-09 00:30  achnly  阅读(231)  评论(0编辑  收藏  举报