MySQL 5.0新特性之視圖(中文教程,原創)
花了國慶的部分時間,終于完成了這個教程的翻譯了,現在可以想象當年候捷先生翻譯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.tkk7.com/Files/chenpengyi/MySQL-Views-Translation-CN.rar
轉載時保留個人及出處信息,否則可能被視為侵權,呵呵。
如果需要英文原版,可以到下面地址下載:
http://dev.mysql.com/tech-resources/articles/mysql-views.pdf
posted on 2005-10-05 11:39 benchensz 閱讀(6968) 評論(5) 編輯 收藏 所屬分類: 隨便寫寫(比較有用,值得看看)