MySQL数据视图

创建和查询视图

视图是从一个或多个表(或视图)导出的表。视图是数据库的用户使用数据库的观点。视图与表【有时为与视图区别,也称表为基本表(Base Table)】不同,视图是一个虚表,及试图所对应的数据不进行实际存储,数据库中只存储视图的定义,对视图的数据进行操作时,系统根据视图的定义去操作与视图相关联的基本表。

使用视图有一下优点:

1.为用户集中数据,简化用户的数据查询和处理。

2.屏蔽数据库的复杂性。

3.简化用户权限的管理。

4.便于数据共享。

5.可以重新组织数据,以便输出到其他应用程序中。

创建视图

语法格式如下。

CREATE [ON REPLACE] VIEN 视图名 [(列名列表]]
AS SELECT 语句
[WITH [CASCADED |LOCAL] CHECK OPTION]

OR REPLACE:给定OE REPLACE子句,语句能够替换已有的同名视图。

WITH CHECK OPTION:LOCAL关键字时CHECK OPTION只对定义的视图进行检查,CASCADED则会对所有试图进行检查。如果为给定任意关键字,则默认为CASCADED.

注意事项。

1.在默认情况下,将在当前数据库创建新视图。

2.视图的命名必循遵循标识符命名规则,不能与表同名。

3.不能把规则、默认值或触发器与视图相关联。

4.不能在试图上建立任何索引,包括全文索引

5.视图中使用SELECT语句有以下限制。

(1)定义视图的用户必须对所参照的表或试图有查询权限,即可执行SELECT语句的权限;在定义中引用的表或视图必须存在。

(2)不能包含FROM子句中的子查询,不能引用系统或用户变量,不能引用预处理语句参数

(3)在视图定义中允许使用ORDER BY子句,但是,如果从特定试图进行了选择,而试图使用了具有自己ORDER BY子句的语句,则试图定义中的ORDER BY子句将被忽略。

例1:创建bookstore数据库上的jsj_sell视图,包括计算机类图书的销售订单号,图书编号、书名、订购册数等情况,要保证对该视图的订单修改都要符合计算机类这个条件。

create or replace view jsj_sell
     as
     select 订单号,sell.图书编号,书名,订购册数
     from book,sell
     where book.图书编号=sell.图书编号
     and book.图书类别='计算机'
     with check option;

例2:创建bookstore数据库中“计算机”类图书销售视图sale_avg,包括书名(在视图列名为“name”)和该图书的平均订购册数(在视图中列名为“sale_avg”)。

 create view sale_avg (name,sale_avg)
     as
     select 书名,avg(订购册数)
     from jsj_sell
     group by 书名;

查询视图

查询表与视图查询一致

例:在试图jsj_sell中查找“计算机”类图书的订单号和订购册数。

select 订单号,订购册数
     from jsj_sell;

操作视图

通过视图操作数据

1.可更新视图

要通过视图更新基本表数据,必须保证视图是可更新视图,既可以在INSET、UPDATE或DELETE等语句当中使用它们。对于可更新视图,视图中的行和基本表中的行之间必须具有一对一的关系。如果视图包括下述结构中的任何一种,那么它就是不可更新的。

(1)聚合函数

(2)DISTINCT关键字

(3)GROUP BY子句

(4)ORDER BY子句

(5)HAVING子句

(6)UNION运算符

(7)位于选择列表中的子查询

(8)FROM 子句中包含多个表

(9)SELECT语句中引用了不可更新视图。

(10)WHERE子句中的子查询,引用FROM子句中的表

插入数据

当使用试图插入数据时,如果在创建视图时加上WITH CHECK OPTION子句,WITH CHECK 子句会在更新数据的时候检查新数据是否符合视图定义中WHERE子句的条件

WITH CHECK OPTION子句只能和可更新视图一起使用

例:创建视图jsj_book,视图包含“计算机”类图书的信息,并向jsj_book视图中插入一条记录“TP.0837“,计算机,OFFICE应用实例,张瑜海,人民邮电出版社,2010-10-21,34.5,NULL,NULL,NULL".

首先创建视图jsj_book

create or replace view jsj_book
     as
     select *from book
     where 图书类别='计算机'
     with check option;

插入记录

insert into jsj_book
     value('TP.0837','计算机','OFFICE应用实例','张瑜海','人民邮电出版社','2020-10-21',34.5,NULL,NULL,NULL);

修改数据

使用UPDATE 语句可以实现通过视图修改基本表数据。

例:jsj_book视图中所有单价降低%5.

update jsj_book
     set 单价=单价*(1-0.05);

例2:将jsj_sell视图中图书编号为”TP.2525“的书名改为”PHP网站制作“,将订单号为5的订购册数改为100册。

update jsj_sell
    set 书名='PHP网站制作'
     where 图书编号='TP.2525';
update jsj_sell
     set 订购册数='100'
     where 订单号=5;

删除数据

如果视图来源于单个基本表,可以使用DELETE语句通过视图来删除基本表数据

例:删除jsj_book中”人民邮电出版社记录“。

delete from jsj_book
     where 出版社='人民邮电出版社';

修改视图定义

使用ALTER语句可以对已有的定义进行修改

语法格式如下。

ALTER VIEW 视图名 [(列名列表)]
AS SELECT 语句
[WITH [CASCADED | LOCAL] CHECK OPTION

例:将jsj_book视图修改为只包含”计算机“类图书的图书编号、书名和单价。

 alter view jsj_book
     as
     select 图书编号,书名,单价 from book
     where 图书类别='计算机';

删除视图

语法格式如下。

DROP VIEW [IF EXISTS]
视图名1[,视图名2]···

### 导出MySQL视图数据 为了从MySQL数据库中导出视图数据,可以采用多种方法。由于Navicat for MySQL这类图形化工具在导出时不会携带视图结构[^2],因此推荐使用命令行方式来完成这一操作。 #### 方法一:通过mysqldump命令导出视图定义和基础表数据 如果目标是保存整个数据库的状态,包括视图及其依赖的基础表,则可以通过`mysqldump`命令实现: ```bash mysqldump -u 用户名 -p 数据库名称 > 备份文件.sql ``` 执行上述命令后,系统会提示输入密码,在正确提供之后即可开始备份过程。此方法不仅能够捕获到所有的表格信息,同时也涵盖了视图在内的其他对象定义[^1]。 #### 方法二:单独提取视图定义语句 对于只需要获取特定视图定义的情况,可以直接查询information_schema.views系统表并将其内容重定向至外部文件: ```sql SELECT view_definition INTO OUTFILE '/tmp/view_def.sql' FROM information_schema.VIEWS WHERE table_schema='数据库名字' AND table_name='视图名字'; ``` 这段SQL脚本将指定视图的CREATE VIEW语句写入到了服务器端/tmp目录下的view_def.sql文件里。注意路径权限设置以便允许MySQL服务进程访问该位置存储文件[^3]。 #### 方法三:利用SHOW CREATE VIEW显示视图创建语句 另一种简单的方式就是运用`SHOW CREATE VIEW`指令查看某个具体视图是如何构建起来的,并手动复制粘贴所需的DDL(Data Definition Language)部分用于迁移或其他用途: ```sql SHOW CREATE VIEW `数据库`.`视图`; ``` 这将会返回两结果集——一个是视图的名字;另一个则是完整的建表语句字符串。用户可以根据需求进一步处理这些信息[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值