Mysql视图

1.初识视图

1.视图的概念和作用

什么是视图:是从一个或多个表中导出来的表,它是一种虚拟存在的表表的结构和数据都依赖于基本表

作用:

简化查询语句:简化用户的查询操作,使查询更加快捷。
安全性:更方便的进行权限控制。
逻辑数据独立性:屏蔽真实表结构变化带来的影响。

2.创建视图语法

CREATE[OR REPLACE][ALGORITHM = {
    UNDEFINED |MERGETEMPTABLE]
[DEFINER= { user | CURRENT_USER]
[SQL SECURITY { DEFINER | INVOKER}]
VIEW view_name [(column_list)]
AS select_statement
[WITH[CASCADED|LOCAL]CHECK OPTION]
  • CREATE:表示创建视图的关键字。
  • OR REPLACE:可选,表示替换已有视图。
  • ALGORITHM:可选,表示视图算法,会影响查询语句的解析方式。

ALGORITHM取值有如下3个:
UNDEFINED:默认,由MySQL自动选择算法。
MERGE:将select_statement和查询视图时的SELECT语句合并起来
查询。
TEMPTABLE:先将select_statement的查询结果存入临时表,然后用
临时表进行查询。

  • DEFINER:可选,表示定义视图的用户,与安全控制有关,默认为当前用户。
  • SQL SECURITY:可选,用于视图的安全控制。

SQL SECURITY取值有如下2个:
DEFINER:默认,由定义者指定的用户的权限来执行。
INVOKER:由调用视图的用户的权限来执行。

  • view_name:表示要创建的视图名称。
  • column_list:可选,用于指定视图中的各个列的名称。(默认与SELECT语句查询的列相同)
  • AS:表示视图要执行的操作。
  • select_statement:一个完整的查询语句,表示从某些表或视图中查出某些满足条件的记录,将这些记录导入视图中。
  • WITH CHECK OPTION:可选,用于视图数据操作时的检查条件。若省略此子句,则不进行检查。

取值:
CASCADED:默认,操作数据时要满足所有相关视图和表定义的条件。例如,当在一个视图的基础上创建另一个视图时,进行级联检查。
LOCAL:操作数据时满足该视图本身定义的条件即可。

2.视图管理

1.创建视图

在多表上创建视图

#创建视图
mysql> CREATE VIEW view_goods_cate As
->SELECT g.id,g.name,c.name category_name FROM sh_goods
->LEFT JOIN sh_goods_category c
-> ON g.category_id = c.id;
Query OK,0 rows affected (o.01 sec)
#查询视图
mysql> SELECT *  FROM view_goods_cate LIMIT 3;
十————十————————十——————————十
| id l namel category_namel
十————十————————十——————————十
| 1    |  2B铅笔|    文具	|
| 2    |   钢笔 |    文具    |
| 3    |  碳素笔|    文具    |
十————十————————十——————————十
3 rows in set (o.00 sec)

自定义列名称

#创建视图
mysq1> CREATE VIEW view_ goods_ promo (sn, title, promotion_ _price) AS
-> SELECT id, name, price*0.8 FROM sh_ goods;

在这里插入图片描述

#②查询视图
mysq1> SELECT * FROM view goods_ promo WHERE sn <= 3;

Mysql视图_第1张图片

在创建视图时,自定义列名称的顺序与AS后SELECT字段列表的顺序一-致。
自定义列名称的数量必须与SELECT字段列表的数量- -致。

2.查看视图

1.查看视图字段信息
mysq1> DESC view_ goods_ cate;

Mysql视图_第2张图片

2.查看视图状态信息
mysq1> SHOW TABLE STATUS LIKE 'view_ goods_ cate' \G

Mysql视图_第3张图片

3.查看创建视图的语句
mysql> SHOW CREATE VIEW view_ goods_ cate \G .

Mysql视图_第4张图片

3.修改视图

修改视图:修改数据库中存在的视图的定义。
例如,当基本表中的某些字段发生变化时,视图必须修改才能正常使用。

1.替换已有的视图
#创建视图
mysql> CREATE VIEW view_ goods AS
-> SELECT id, name, price FROM sh_ goods;
Query OK, 0 rows affected (0.01 sec)

在这里插入图片描述

#修改已有视图
mysql> CREATE OR REPLACE VIEW view_ goods AS
-> SELECT id, name FROM sh_ goods;

在这里插入图片描述

#查看修改结果
mysql> DESC view_ goods; 

Mysql视图_第5张图片

修改视图语法
ALTER [AL GORITHM = {
    UNDEFINED | MERGE| TEMPTABLE}]
[DEFINER = { user | CURRENT_ _USER }]
[SQL SECURITY { DEFINER |INVOKER }]
VIEW view_ name [(column_ list)]
AS SELECT_ statement
[WITH [CASCADED | LOCAL] CHECK OPTION]

使用方法如下所示:

#修改视图
mysql> ALTER VIEW view_ goods AS SELECT id FROM sh_ goods;

在这里插入图片描述

#查看修改结果
mysql> DESC view_ goods;

Mysql视图_第6张图片

4.修改视图

DROP VIEW [IF EXISTS] view_ name [,view_ name1]...

使用方法如下图所示:

#删除视图
mysql> DROP VIEW view_goods;
Query OK, 0 rows affected (0.00 sec)
#检查视图是否已被删除
mysql> SELECT * FROM view_goods;
ERROR 1146 (42S02) : Table 'shop. view_ goods' doesn't exist

3.视图数据操作

1.添加数据

使用INSERT语句通过视图向基本表添加数据

#创建视图
mysql> CREATE VIEW view_ category AS
-> SELECT id, name FROM sh_goods_category;
Query OK, 0 rows affected (0.01 sec)
#添加数据
mysql> INSERT INTO view_ category VALUES (17, '图书') ;
Query OK,1 row affected (0.00 sec)
#查询添加后的数据
mysql> SELECT id, name FROM sh_ goods_ category WHERE id = 17;

Mysql视图_第7张图片

2.修改数据

使用UPDATE语句通过视图修改基本表中的数据

#修改数据
mysql> UPDATE view_category SET name = '家电' WHERE id = 17;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
#查询修改后的数据
mysql> SELECT id, name FROM sh_ goods_ category WHERE id = 17;

Mysql视图_第8张图片

3.修改数据

使用DELETE语句通过视图删除基本表中的数据

#删除数据
mysql> DELETE FROM view_category WHERE id = 17;
Query OK, 1 row affected (0.00 sec)
#查询数据是否已经删除
mysql> SELECT id, name FROM sh_goods_category WHERE id = 17;
Empty set (0.00 sec)

你可能感兴趣的:(MySQL,mysql,视图,视图操作,sql)