MySql基础学习 数据库:
本文讲述MySql5.x中视图的使用,包括创建视图、修改视图和删除视图的相关知识,包括命令的语法、使用举例以及注意事项。
一. 视图概述
视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。
对其中所引用的基础表来说,视图的作用类似于筛选。定义视图的筛选可以来自当前或其它数据库的一个或多个表,或者其它视图。通过视图进行查询没有任何限制,通过它们进行数据修改时的限制也很少。
二. 创建视图——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的权限。
相关视频
相关阅读 Mac OS X 系统上如何升级 Mysql 数据库?mysql数据库root密码忘记的修改方法mysql启动错误1067简单解决办法彻底解决mysql中文乱码的办法Dos远程登录mysql数据库详细图文教程mysql怎么开启远程登录功能mysql自动定时备份数据库的最佳方法-支持windows系统mysql数据库损坏快速修复方法
热门文章 没有查询到任何记录。
最新文章
sql 2000升级到sql 20sql server安装教程
安装sql 2005时visual studio just-in-timesql server停止和重启命令SQL Server备份和灾难恢复MySQL数据库十大优化技巧
人气排行 如何轻松解决MYSQL数据库连接过多的错误sql server停止和重启命令SQL报表错误“未能为SSL/TLS安全通道建立信sql 2000升级到sql 2005后访问速度变慢图文安装sql 2005时visual studio just-in-timeSqlServer2000获取当前日期及格式SQL的排序,分组,统计常用语句解决MySQL中文模糊查询问题
查看所有0条评论>>