08-MySQL视图
1 视图基本概念
视图是一个虚拟表,是从数据库中一个或多个表中导出来的表,视图还可以从已经存在的视图的基础上定义。视图的行为与表非常相似,单视图是一个虚拟表。在视图中用户可以使用SELECT语句查询数据,以及使用INSERT、UPDATE、DELETE修改记录。
视图一经定义遍存储在数据库中,通过视图看到的数据就是存放在基本表中的数据。对视图操作和对表操作一样。
2 视图作用
2.1 简单化
简化用户对数据的理解,简化用户对数据的操作。
2.2 安全性
通过视图用户只能查询和修改他们所能看到的数据。数据库中的其他数据则看不到、无法修改。
2.3 逻辑数据独立性
视图帮助用户评比真实表结构变化带来的影响
3 创建视图
create [ or replace] [algorithm = { undefined | 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 | 参数表示视图在更新时保证在视图的权限范围之内 |
algorithm:
algorithm取值 | 备注 |
---|---|
undefined | 未定义 |
merge | 表示将使用的视图语句与视图定义合并起来,是的视图定义的某一部分取代语句对应的部分 |
temptable | 表示将视图的结果存入临时表,然后用临时表来执行语句 |
cascaded与local为可选参数,cascaded为默认值,表示更新视图时要满足所有相关视图和表的条件;local表示更新视图时满足该视图本身定义的条件即可。
创建视图需要的权限:
- 具有针对视图的create view 权限
- 对于select语句中其他地方使用的列,必须具有select权限。如果还有 or replace子句,必须在视图上具有drop权限。
3.1 在单表上创建视图
测试表结构与数据创建
-- 创建测试表结构
mysql> create table t (quantity int, price int);
Query OK, 0 rows affected (0.03 sec)
-- 插入测试数据
mysql> insert into t values(3, 50);
Query OK, 1 row affected (0.02 sec)
-- 查看测试数据
mysql> select * from t;
+----------+-------+
| quantity | price |
+----------+-------+
| 3 | 50 |
+----------+-------+
1 row in set (0.00 sec)
创建一个视图,共有三个字段,quantity,price , quantity* price
-- 创建一个视图view_t
mysql> create view view_t as select quantity,price,quantity * price from t;
Query OK, 0 rows affected (0.00 sec)
-- 查询视图
mysql> select * from view_t;
+----------+-------+------------------+
| quantity | price | quantity * price |
+----------+-------+------------------+
| 3 | 50 | 150 |
+----------+-------+------------------+
1 row in set (0.00 sec)
默认情况下视图和基本表的字段是一样的,也可以通过指定视图字段的名称来创建视图:
-- 新建视图
mysql> create view view_2 (qty, price, total) as select quantity, price, quantit
y*price from t;
Query OK, 0 rows affected (0.00 sec)
-- 查看视图
mysql> select * from view_2;
+------+-------+-------+