一. 视图概述
视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。
对其中所引用的基础表来说,视图的作用类似于筛选。定义视图的筛选可以来自当前或其它数据库的一个或多个表,或者其它视图。通过视图进行查询没有任何限制,通过它们进行数据修改时的限制也很少。
二. 创建视图——CREATE VIEW
1. 语法
CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
VIEW [db_name.]view_name [(column_list)]
AS select_statement
[WITH [CASCADED | LOCAL] CHECK OPTION]
通过该语句可以创建视图,若给定了[OR REPLACE],则表示当已具有同名的视图时,将覆盖原视图。select_statement是一个查询语句,这个查询语句可从表或其它的视图中查询。视图属于数据库,因此需要指定数据库的名称,若未指定时,表示在当前的数据库创建新视图。
表和数据库共享数据库中相同的名称空间,因此,数据库不能包含相同名称的表和视图,并且,视图的列名也不能重复。
2. 使用举例
Eg. 本例创建一个产品表(product)和一个购买记录表(purchase),再通过视图purchase_detail查询出购买的详细信息。
CREATE TABLE product
(
product_id INT NOT NULL,
name VARCHAR(50) NOT NULL,
price DOUBLE NOT NULL
);
INSERT INTO product VALUES(1, ‘apple ‘, 5.5);
CREATE TABLE purchase
(
id INT NOT NULL,
product_id INT NOT NULL,
qty INT NOT NULL DEFAULT 0,
gen_time DATETIME NOT NULL
);
INSERT INTO purchase VALUES(1, 1, 10, NOW());
CREATE VIEW purchase_detail AS SELECT product.name as name, product .price as price, purchase.qty as qty, product .price * purchase.qty as total_value from product, purchase where product.product_id = purchase.product_id;
创建成功后,输入:SELECT * FROM purchase_detail;
运行效果如下:
+——-+——-+—–+————-+
| name | price | qty | total_value |
+——-+——-+—–+————-+
| apple | 5.5 | 10 | 55 |
+——-+——-+—–+————-+
1 row in set (0.01 sec)
3. 注意事项
创建视图存在如下注意事项:
(1) 运行创建视图的语句需要用户具有创建视图(CRATE VIEW)的权限,若加了[OR REPLACE]时,还需要用户具有删除视图(DROP VIEW)的权限;
(2) SELECT语句不能包含FROM子句中的子查询;
(3) SELECT语句不能引用系统或用户变量;
(4) SELECT语句不能引用预处理语句参数;
(5) 在存储子程序内,定义不能引用子程序参数或局部变量;
(6) 在定义中引用的表或视图必须存在。但是,创建了视图后,能够舍弃定义引用的表或视图。要想检查视图定义是否存在这类问题,可使用CHECK TABLE语句;
(7) 在定义中不能引用TEMPORARY表,不能创建TEMPORARY视图;
(8) 在视图定义中命名的表必须已存在;
(9) 不能将触发程序与视图关联在一起;
(10) 在视图定义中允许使用ORDER BY,但是,如果从特定视图进行了选择,而该视图使用了具有自己ORDER BY的语句,它将被忽略。
三. 修改视图——ALTER VIEW
1. 语法
ALTER [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
VIEW view_name [(column_list)]
AS select_statement
[WITH [CASCADED | LOCAL] CHECK OPTION]
该语句用于更改已有视图的定义。其语法与CREATE VIEW类似。
2. 使用举例
Eg. 将上一小节中中创建的视purchase_detail进行修改,去掉qty列,语句如下:
ALTER VIEW purchase_detail AS SELECT product.name as name, product .price as price, product .price * purchase.qty as total_value from product, purchase where product.product_id = purchase.product_id;
此时通过语句:select * from purchase_detail;对视图进行查询时,结果如下:
+——-+——-+————-+
| name | price | total_value |
+——-+——-+————-+
| apple | 5.5 | 55 |
+——-+——-+————-+
3. 注意事项
修改视图的注意事项除了第一条外跟创建视图的注意事项是一样的。第(1)条应改为:
该语句需要具有针对视图的CREATE VIEW和DROP权限,也需要针对SELECT语句中引用的每一列的某些权限。
四. 删除视图——DROP VIEW
1. 语法
DROP VIEW [IF EXISTS]
view_name [, view_name] …
[RESTRICT | CASCADE]
该语句用户删除视图,可一次删除多个视图。[IF EXISTS]选项确保语句正确运行。若没有该子句,当指定的视图不存在时,将发生错误。
2. 使用举例
Eg1. 删除在前面的小节中创建的视图purchase_detail:DROP VIEW purchase_detail;
Eg2. 删除一个未知的视图:DROP VIEW IF EXISTS test_view;
Eg3. 删除多个视图:DROP VIEW IF EXISTS test_view1, test_view2;
3. 注意事项
必须对要删除的一个或多个视图拥有DROP VIEW的权限
分享到:
相关推荐
- 在左侧的连接列表中,找到您想要创建视图的数据库,并展开它。 3. **打开视图管理界面**: - 在数据库对象列表中,找到“视图”项,右键点击它,然后选择“新建视图”。 4. **创建视图**: - 在新弹出的窗口...
创建视图 数据视图 课程目标 理解 —— 创建视图的语法格式; 掌握—— 创建视图的方法; 掌握 —— 查看视图的方法。 创建视图 使用CREATE VIEW语句创建视图 语法格式: CREATE [OR REPLACE] VIEW 视图名 [(列名...
在介绍如何使用Power Designer工具生成MySQL数据库表关系视图之前,我们需要了解Power Designer和MySQL的ODBC驱动的背景知识。 Power Designer是一款由Sybase公司开发的强大的数据库设计工具,它支持数据建模,从...
当创建视图时,可以通过`WITH CHECK OPTION`子句来确保在对视图进行更新操作时,新数据仍然满足视图的定义条件。这有助于维护数据的一致性。 - **CASCADE**: 当使用此选项时,MySQL不仅检查当前视图的条件,还会...
真正值得一看的mysql知识。MySQL中实现物化视图(中文版)翻译于外文。
创建视图的过程是将SQL查询的结果集保存为一个逻辑上的表。在NAVICAT中,你可以按照以下步骤进行: 1. 首先,打开你的MySQL数据库连接,进入你需要操作的数据库。 2. 在对象浏览器中,选择“视图”选项,右键点击并...
在MySQL中,使用`CREATE VIEW`语句来创建视图。基本语法如下: ```sql CREATE VIEW 视图名 AS SELECT 字段1, 字段2, ... FROM 表名 WHERE 条件; ``` 这里的`视图名`是你想要创建的视图的名称,`SELECT`语句...
MySql示例5:创建并查询视图.zip,MySql示例5:创建并查询视图.zip,MySql示例5:创建并查询视图.zip,MySql示例5:创建并查询视图.zipMySql示例5:创建并查询视图.zip
创建视图的基本语法如下: ```sql CREATE VIEW <视图名> AS 语句> ``` 在这里,`<视图名>`是你为新视图选择的唯一名称,`语句>`则是一个用于定义视图内容的SQL查询。这个查询可以涉及一个或多个表,但有几点需要...
创建 MySQL 视图需要使用 Navicat 软件连接到 MySQL 数据库,然后按照以下步骤创建视图: 1. 打开 Navicat 软件,连接到 MySQL 数据库。 2. 找到要创建视图的库,右键点击创建视图。 3. 将要创建视图的表全部拖拽到...
开发者可以使用这个JDBC驱动程序编写Java代码来访问Navicat for MySQL创建的视图,进行数据的增删改查等操作。使用Java连接MySQL数据库,需要导入这个JAR文件,并配置相应的数据库连接参数,如URL、用户名和密码。 ...
这里,`ALGORITHM`参数可以指定创建视图时使用的算法。`MERGE`算法试图合并输入查询和视图定义,`TEMPTABLE`会创建临时表来存储结果,而`UNDEFINED`则让MySQL自行选择合适的算法。如果`MERGE`不适用,MySQL会默认...
本篇主要介绍如何通过MySQL数据库创建视图来访问Oracle数据库中的表,实现数据的互联互通。 首先,我们要理解MySQL和Oracle之间的数据集成。由于它们是两个不同的数据库系统,直接的SQL查询并不能实现跨库操作。...
通过创建视图,可以定义一个特定的查询结果,并将其作为一张“表”来使用。这不仅能够简化复杂的查询过程,还能提高数据的安全性,因为可以通过视图隐藏敏感信息。 **语法格式:** ```sql CREATE [OR REPLACE] ...
本文实例讲述了mysql视图之创建可更新视图的方法。分享给大家供大家参考,具体如下: 我们知道,在mysql中,视图不仅是可查询的,而且是可更新的。这意味着我们可以使用insert或update语句通过可更新视图插入或更新...
假设有一个产品表(`product`)和一个购买记录表(`purchase`),我们可以通过创建视图`purchase_detail`来获取详细的购买信息。 1. **创建产品表**: ```sql CREATE TABLE product ( product_id INT NOT NULL, ...
创建视图的语法如下: ```sql CREATE VIEW 视图表名称 AS SELECT 字段列表 FROM 基表名称 WHERE 条件; ``` 在上述例子中,创建了一个名为`user_view`的视图,它只包含`user`表中的`name`和`shell`两个字段。用户可以...
1. 创建视图前,需要保证创建视图的用户具有Create view的权限,同时要有查询涉及列的Select权限。 2. 创建视图的语法格式如下:Create [or replace] view视图名[(列名1,列名2,…)]asselect语句[with check option] ...