MySQL 5.0新特性之视图(中文教程,转载)

转自:http://www.blogjava.net/chenpengyi/archive/2005/10/05/14809.html 

花了国庆的部分时间,终于完成了这个教程的翻译了,现在可以想象当年候捷先生翻译Think in Java是多么困难的了,唉,累啊,好久没运动过了,快找个机会去玩玩。可惜深圳没什么地方可以运动的,订运动场稍微慢一点就没了……政府问题,不去讨论。


         回到正题,关于这个翻译我十分推荐大家看看,因为对MySQL来说,实现了视图确实是一个很大的进步,而且能给MySQL开发者带来的好处不仅仅是速度上的,更多是开发和维护效率上的改进。


        这里举一个书中的例子吧:


Example: Constraint checks 示例:约束条件检查

MySQL支持NOT NULL的列约束,如:
 
CREATE TABLE t ( 

  column1 INT NOT NULL,  

  column2 INT NOT NULL); 
 


这并非MySQL约束的全部功能,但是还是不能做到只允许两列中其中一列可以为空或者让列1数值在1到5之间,又或者使列1在某些特殊情况下可以为空。不过,我们可以使用视图的定义通过下面的方法实现:

CREATE TABLE t (column1 INT, column2 INT);
 
CREATE VIEW v AS

SELECT column1, column2 FROM t

WHERE (column1 is NOT NULL OR column2 IS NOT NULL) 

  AND column1 BETWEEN 1 AND 5

WITH CHECK OPTION; 

 
之后就可以通过对视图v进行插入或更新,达到我前面所需要的效果,在特殊情况下允许为空。


 是不是比较有用呢?前面我写了篇关于MySQL子查询的文章,但有了视图其实可以免去部分使用子查询的情况,大家看看下面这个例子吧:



示例:子查询的替代
 
在MySQL 4.1版本以后就开始支持FROM语句中的子查询了,例如:

 
SELECT *

FROM (SELECT * FROM t2 UNION SELECT * FROM t3) AS t2_t3; 

 
但是下面这样做会更好:
 

CREATE VIEW t2_t3 AS

SELECT * FROM t2 UNION SELECT * FROM t3;
 
SELECT * FROM t2_t3;



把这个转化为对视图的查询会更好更方便,因为你可能会使用复杂的对大数字的查询语句(比方说55个字),语句中包括对系统变量的一些定义,那如果有人改变了表t2,你可能要改这个55字的SELECT语句,然而使用视图,一切都没变,你需要改的只是视图定义中的表名。 


 
另一个子查询的例子:在MySQL 5.0.3中不允许使用AVG(DISTINCT ...),因为下面这个语句是非法语句: 

 
SELECT AVG(DISTINCT column1) FROM t;
 
但采用下面方法能实现一样的效果,而且是合法的:
 
CREATE VIEW v AS SELECT DISTINCT column1 FROM t;
 
SELECT AVG(column1) FROM v;


下面是中文版的下载地址:

http://www.blogjava.net/Files/chenpengyi/MySQL-Views-Translation-CN.rar
转载时保留个人及出处信息,否则可能被视为侵权,呵呵。

如果需要英文原版,可以到下面地址下载:
http://dev.mysql.com/tech-resources/articles/mysql-views.pdf

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值