八、视图
含义
虚拟表,和普通表一样使用。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 | 占用,保存了数据 | 增删改查 |