朋的博客

          MySQL資料,Java技術,管理思想,博弈論,Ajax,XP極限編程,H.264,HEVC,HDR
          隨筆 - 86, 文章 - 59, 評論 - 1069, 引用 - 0

          導航

          <2005年10月>
          2526272829301
          2345678
          9101112131415
          16171819202122
          23242526272829
          303112345

          常用鏈接

          隨筆分類(78)

          隨筆檔案(84)

          文章分類(59)

          文章檔案(59)

          搜索

          •  

          積分與排名

          • 積分 - 858966
          • 排名 - 47

          最新評論

          閱讀排行榜

          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.aygfsteel.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 閱讀(6977) 評論(5)  編輯  收藏 所屬分類: 隨便寫寫(比較有用,值得看看)

          評論

          # re: MySQL 5.0新特性之視圖(中文教程,原創)  回復  更多評論   

          還有幾本書有中文翻譯沒有?
          我只看到過
          主題 MySQL 5.x 相關資料 (全中文) zz « 上一主題 | 下一主題 »

          sensebb_1 發表于:2005-10-14 17:57

          發帖: 862
          積分: 0
          注冊: 2003-04-14
          MySQL 5.0
          的正式版相信不久就出來了 (現在是 5.0.13 rc1),
          快快了解一下它吧!


          * MySQL 5.0 新特性教程 (系列)

          - 第一部分: 存儲過程 (Store Procedure)
          第一講: http://www.phpv.net/article.php/1460
          第二講: http://www.phpv.net/article.php/1461
          第三講: http://www.phpv.net/article.php/1462
          第四講: http://www.phpv.net/article.php/1463

          * MySQL 5.0 中的觸發器 (trigger)

          http://www.phpv.net/article.php/1473

          * 看不懂 MySQL 出錯時的代碼? 這里有詳細的錯誤碼
          (Error Number) 對應表:

          http://www.phpv.net/article.php/1477

          還缺:
          MySQL 5.0 Data Dictionary
          The MySQL 5.0 Archive Storage Engine
          MySQL 5.0's Pluggable Storage Engine Architecture, Part 1: An Overview
          2005-10-31 13:44 | l1t

          # re: MySQL 5.0新特性之視圖(中文教程,原創)  回復  更多評論   

          那怎樣修改視圖呢?
          比如說我寫一個視圖為
          create view test as select * from table1;
          當我想改成 select name from table1;
          的時候我怎么改啊?
          2005-11-25 16:25 | gqin

          # re: MySQL 5.0新特性之視圖(中文教程,原創)  回復  更多評論   

          Good place, but need more!
          2006-02-10 17:48 | timmy

          # re:那怎樣修改視圖呢?  回復  更多評論   

          @gqin
          mysql5手冊里有
          create or replace view test as select name from table1;

          alter view test as select name from table1;
          2006-02-28 16:17 | guest

          # re: MySQL 5.0新特性之視圖(中文教程,原創)  回復  更多評論   

          alter view test as select name from table1
          2006-04-05 20:59 | 陳朋奕
          主站蜘蛛池模板: 鄂托克前旗| 上蔡县| 昌吉市| 于田县| 江安县| 张家港市| 离岛区| 鹤岗市| 阳江市| 满城县| 霸州市| 卓资县| 诸城市| 驻马店市| 成都市| 东方市| 孟津县| 临邑县| 临海市| 浮梁县| 郸城县| 壶关县| 海原县| 柘城县| 浦江县| 阿勒泰市| 绵阳市| 岳阳县| 伊宁县| 偃师市| 新闻| 防城港市| 承德市| 麻城市| 岗巴县| 女性| 临猗县| 沾化县| 罗田县| 田阳县| 宝鸡市|