Mysql视图

   日期:2020-09-27     浏览:104    评论:0    
核心提示:1.初识视图1.视图的概念和作用什么是视图:是从一个或多个表中导出来的表,它是一种虚拟存在的表,表的结构和数据都依赖于基本表。作用:简化查询语句:简化用户的查询操作,使查询更加快捷。安全性:更方便的进行权限控制。逻辑数据独立性:屏蔽真实表结构变化带来的影响。2.创建视图语法CREATE[OR REPLACE][ALGORITHM = {UNDEFINED |MERGE│TEMPTABLE][DEFINER= { user | CURRENT_USER][SQL SECURITY { DE

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;

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

2.查看视图

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

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

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

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; 

修改视图语法
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;

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;

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;

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)
 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服