《MYSQL教程MySQL5.0存儲過程教程》要點:
本文介紹了MYSQL教程MySQL5.0存儲過程教程,希望對您有用。如果有疑問,可以聯系我們。
希望這本書能像內行專家那樣與您進行對話,用簡單的問題、例子讓你學到需要的知識.為了達到這樣的目的,我會從每一個細節開始慢慢的為大家建立概念,最后會給大家展示較大的實用例,在學習之前也許大家會認為這個用例很難,但是只要跟著課程去學,相信很快就能掌握.
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用戶,以得到長久的支持和幫助.
Why?MySQL?Statements?are?Legal?in?a?Procedure?Body
什么MySQL語句在存儲過程體中是合法的?
什么樣的SQL語句在Mysql存儲過程中才是合法的呢?你可以創建一個包含INSERT,?UPDATE,DELETE,?SELECT,?DROP,?CREATE,?REPLACE等的語句.你唯一需要記住的是如果代碼中包含MySQL擴充功能,那么代碼將不能移植.在標準SQL語句中:任何數據庫定義語言都是合法的,如:
CREATE?PROCEDURE?p?()?DELETE?FROM?t;?//
SET、COMMIT以及ROLLBACK也是合法的,如:
CREATE?PROCEDURE?p?()?SET?@x?=?5;?//
MySQL的附加功能:任何數據操作語言的語句都將合法.
CREATE?PROCEDURE?p?()?DROP?TABLE?t;?//
MySQL擴充功能:直接的SELECT也是合法的:
CREATE?PROCEDURE?p?()?SELECT?'a';?//
順便提一下,我將存儲過程中包括DDL語句的功能稱為MySQL附加功能的原因是在SQL標準中把這個定義為非核心的,即可選組件.
The?New?SQL?Statements?新SQL語句
Variables?變量
在復合語句中聲明變量的指令是DECLARE.
(1)?Example?with?two?DECLARE?statements
兩個DECLARE語句的例子?
CREATE?PROCEDURE?p8?()
BEGIN
DECLARE?a?INT;
DECLARE?b?INT;
SET?a?=?5;
SET?b?=?5;
INSERT?INTO?t?VALUES?(a);
SELECT?s1?*?a?FROM?t?WHERE?s1?>=?b;
END;?//?/*?I?won't?CALL?this?*/
在過程中定義的變量并不是真正的定義,你只是在BEGIN/END塊內定義了而已(譯注:也就是形參).
Error?Handling?異常處理
好了,我們現在要講的是異常處理
1.?Sample?Problem:?Log?Of?Failures?問題樣例:故障記錄
當INSERT失敗時,我希望能將其記錄在日志文件中我們用來展示出錯處理的問題樣例是很
普通的.我希望得到錯誤的記錄.當INSERT失敗時,我想在另一個文件中記下這些錯誤的
信息,例如出錯時間,出錯原因等.我對插入特別感興趣的原因是它將違反外鍵關聯的約束
2.?Sample?Problem:?Log?Of?Failures?(2)
mysql>?CREATE?TABLE?t2
s1?INT,?PRIMARY?KEY?(s1))
engine=innodb;//
mysql>?CREATE?TABLE?t3?(s1?INT,?KEY?(s1),
FOREIGN?KEY?(s1)?REFERENCES?t2?(s1))
engine=innodb;//
mysql>?INSERT?INTO?t3?VALUES?(5);//
...
ERROR?1216?(23000):?Cannot?add?or?update?a?child?row:?a?foreign?key
constraint?fails(這里顯示的是系統的出錯信息)
我開始要創建一個主鍵表,以及一個外鍵表.我們使用的是InnoDB,因此外鍵關聯檢查是打
開的.然后當我向外鍵表中插入非主鍵表中的值時,動作將會失敗.當然這種條件下可以很
快找到錯誤號1216.
3.?Sample?Problem:?Log?Of?Failures
CREATE?TABLE?error_log?(error_message
CHAR(80))//
下一步就是建立一個在做插入動作出錯時存儲錯誤的表.
維易PHP培訓學院每天發布《MYSQL教程MySQL5.0存儲過程教程》等實戰技能,PHP、MYSQL、LINUX、APP、JS,CSS全面培養人才。
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/10459.html