Introduction 簡介
MySQL 5.0 新特性教程是為需要瞭解5.0版本新特性的MySQL老使用者而寫的。簡單的來說是介紹了“預存程序、觸發器、視圖、資訊架構視圖”,在此感謝譯者陳朋奕的努力.
希望這本書能像內行專家那樣與您進行對話,用簡單的問題、例子讓你學到需要的知識。為了達到這樣的目的,我會從每一個細節開始慢慢的為大家建立概念,最後會給大家展示較大的實用例,在學習之前也許大家會認為這個用例很難,但是只要跟著課程去學,相信很快就能掌握。
Conventions and Styles 約定和編程風格
每次我想要示範實際代碼時,我會對mysql用戶端的螢幕就出現的代碼進行調整,將字型改成Courier,使他們看起來與普通文本不一樣。
在這裡舉個例子:mysql> DROP FUNCTION f;Query OK, 0 rows affected (0.00 sec)
如果執行個體比較大,則需要在某些行和段落間加註釋,同時我會用將“<--”符號放在頁面的右邊以表示強調。
例如:
mysql> CREATE PROCEDURE p ()-> BEGIN-> /* This procedure does nothing */ <---> END;//Query OK, 0 rows affected (0.00 sec) |
有時候我會將例子中的"mysql>"和"->"這些系統顯示去掉,你可以直接將代碼複製到mysql用戶端程式中如果你現在所讀的不是電子版的,可以在mysql.com網站下載相關指令碼)所以的例子都已經在Suse 9.2 Linux、Mysql 5.0.3公用版上測試通過。
在您閱讀本書的時候,Mysql已經有更高的版本,同時能支援更多OS了,包括Windows,Sparc,HP-UX。因此這裡的例子將能正常的運行在您的電腦上。但如果運行仍然出現故障,可以諮詢你認識的資深Mysql使用者,以得到長久的支援和協助。
A Definition and an Example 定義及執行個體
定義及執行個體預存程序是一種儲存在書庫中的程式就像正規語言裡的子程式一樣),準確的來說,MySQL支援的“routines常式)”有兩種:一是我們說的預存程序,二是在其他SQL語句中可以傳回值的函數使用起來和Mysql預裝載的函數一樣,如pi())。我在本書裡面會更經常使用預存程序,因為這是我們過去的習慣,相信大家也會接受。
一個預存程序包括名字,參數列表,以及可以包括很多SQL語句的SQL語句集。
在這裡對局部變數,異常處理,迴圈控制和IF條件句有新的文法定義。
下面是一個包括預存程序的執行個體聲明:譯註:為了方便閱讀,此後的程式不添任何中文注釋)
CREATE PROCEDURE procedure1 /* name預存程序名*/(IN parameter1 INTEGER) /* parameters參數*/BEGIN /* start of block語句塊頭*/DECLARE variable1 CHAR(10); /* variables變數聲明*/IF parameter1 = 17 THEN /* start of IF IF條件開始*/SET variable1 = 'birds'; /* assignment賦值*/ELSESET variable1 = 'beasts'; /* assignment賦值*/END IF; /* end of IF IF結束*/INSERT INTO table1 VALUES (variable1);/* statement SQL語句*/END /* end of block語句塊結束*/ |
下面我將會介紹你可以利用預存程序做的工作的所有細節。同時我們將介紹新的資料庫物件—觸發器,因為觸發器和預存程序的關聯是必然的。
Why Stored Procedures 為什麼要用預存程序
由於預存程序對於MySQL來說是新的功能,很自然的在使用時你需要更加註意。
畢竟,在此之前沒有任何人使用過,也沒有很多大量的有經驗的使用者來帶你走他們走過的路。然而你應該開始考慮把現有程式可能在伺服器應用程式中,使用者自訂函數UDF)中,或是指令碼中)轉移到預存程序中來。這樣做不需要原因,你不得不去做。
因為預存程序是已經被認證的技術!雖然在Mysql中它是新的,但是相同功能的函數在其他DBMS中早已存在,而它們的文法往是相同的。因此你可以從其他人那裡獲得這些概念,也有很多你可以諮詢或者僱用的經驗使用者,還有許多第三方的文檔可供你閱讀。