MySQL5.0存儲(chǔ)過程教程
更新時(shí)間:2008年04月06日 01:23:53 作者:
Introduction 簡(jiǎn)介
MySQL 5.0 新特性教程是為需要了解5.0版本新特性的MySQL老用戶而寫的。簡(jiǎn)單的來說是介紹了“存儲(chǔ)過程、觸發(fā)器、視圖、信息架構(gòu)視圖”,在此感謝譯者陳朋奕的努力.
希望這本書能像內(nèi)行專家那樣與您進(jìn)行對(duì)話,用簡(jiǎn)單的問題、例子讓你學(xué)到需要的知識(shí)。為了達(dá)到這樣的目的,我會(huì)從每一個(gè)細(xì)節(jié)開始慢慢的為大家建立概念,最后會(huì)給大家展示較大的實(shí)用例,在學(xué)習(xí)之前也許大家會(huì)認(rèn)為這個(gè)用例很難,但是只要跟著課程去學(xué),相信很快就能掌握。
Conventions and Styles 約定和編程風(fēng)格
每次我想要演示實(shí)際代碼時(shí),我會(huì)對(duì)mysql客戶端的屏幕就出現(xiàn)的代碼進(jìn)行調(diào)整,將字體改成Courier,使他們看起來與普通文本不一樣。
在這里舉個(gè)例子:mysql> DROP FUNCTION f;Query OK, 0 rows affected (0.00 sec)
如果實(shí)例比較大,則需要在某些行和段落間加注釋,同時(shí)我會(huì)用將“
mysql> CREATE PROCEDURE p ()
-> BEGIN
-> /* This procedure does nothing */ END;//Query OK, 0 rows affected (0.00 sec)
有時(shí)候我會(huì)將例子中的"mysql>"和"->"這些系統(tǒng)顯示去掉,你可以直接將代碼復(fù)制到mysql客戶端程序中(如果你現(xiàn)在所讀的不是電子版的,可以在mysql.com網(wǎng)站下載相關(guān)腳本)所以的例子都已經(jīng)在Suse 9.2 Linux、Mysql 5.0.3公共版上測(cè)試通過。
在您閱讀本書的時(shí)候,Mysql已經(jīng)有更高的版本,同時(shí)能支持更多OS了,包括Windows,Sparc,HP-UX。因此這里的例子將能正常的運(yùn)行在您的電腦上。但如果運(yùn)行仍然出現(xiàn)故障,可以咨詢你認(rèn)識(shí)的資深Mysql用戶,以得到長(zhǎng)久的支持和幫助。
Why MySQL Statements are Legal in a Procedure Body
什么MySQL語句在存儲(chǔ)過程體中是合法的?
什么樣的SQL語句在Mysql存儲(chǔ)過程中才是合法的呢?你可以創(chuàng)建一個(gè)包含INSERT, UPDATE,DELETE, SELECT, DROP, CREATE, REPLACE等的語句。你唯一需要記住的是如果代碼中包含MySQL擴(kuò)充功能,那么代碼將不能移植。在標(biāo)準(zhǔn)SQL語句中:任何數(shù)據(jù)庫定義語言都是合法的,如:
CREATE PROCEDURE p () DELETE FROM t; //
SET、COMMIT以及ROLLBACK也是合法的,如:
CREATE PROCEDURE p () SET @x = 5; //
MySQL的附加功能:任何數(shù)據(jù)操作語言的語句都將合法。
CREATE PROCEDURE p () DROP TABLE t; //
MySQL擴(kuò)充功能:直接的SELECT也是合法的:
CREATE PROCEDURE p () SELECT 'a'; //
順便提一下,我將存儲(chǔ)過程中包括DDL語句的功能稱為MySQL附加功能的原因是在SQL標(biāo)準(zhǔn)中把這個(gè)定義為非核心的,即可選組件。
The New SQL Statements 新SQL語句
Variables 變量
在復(fù)合語句中聲明變量的指令是DECLARE。
(1) Example with two DECLARE statements
兩個(gè)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塊內(nèi)定義了而已(譯注:也就是形參)。
Error Handling 異常處理
好了,我們現(xiàn)在要講的是異常處理
1. Sample Problem: Log Of Failures 問題樣例:故障記錄
當(dāng)INSERT失敗時(shí),我希望能將其記錄在日志文件中我們用來展示出錯(cuò)處理的問題樣例是很
普通的。我希望得到錯(cuò)誤的記錄。當(dāng)INSERT失敗時(shí),我想在另一個(gè)文件中記下這些錯(cuò)誤的
信息,例如出錯(cuò)時(shí)間,出錯(cuò)原因等。我對(duì)插入特別感興趣的原因是它將違反外鍵關(guān)聯(lián)的約束
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(這里顯示的是系統(tǒng)的出錯(cuò)信息)
我開始要?jiǎng)?chuàng)建一個(gè)主鍵表,以及一個(gè)外鍵表。我們使用的是InnoDB,因此外鍵關(guān)聯(lián)檢查是打
開的。然后當(dāng)我向外鍵表中插入非主鍵表中的值時(shí),動(dòng)作將會(huì)失敗。當(dāng)然這種條件下可以很
快找到錯(cuò)誤號(hào)1216。
3. Sample Problem: Log Of Failures
CREATE TABLE error_log (error_message
CHAR(80))//
下一步就是建立一個(gè)在做插入動(dòng)作出錯(cuò)時(shí)存儲(chǔ)錯(cuò)誤的表。
您可能感興趣的文章:
- MySQL存儲(chǔ)過程例子(包含事務(wù),輸出參數(shù),嵌套調(diào)用)
- mysql 存儲(chǔ)過程中變量的定義與賦值操作
- MySQL 有輸入輸出參數(shù)的存儲(chǔ)過程實(shí)例
- mysql 動(dòng)態(tài)執(zhí)行存儲(chǔ)過程語句
- mysql 教程 存儲(chǔ)過程
- mysql 存儲(chǔ)過程的問題
- MySQL 存儲(chǔ)過程和"Cursor"的使用方法
- MySQL5創(chuàng)建存儲(chǔ)過程的示例
- MySQL與存儲(chǔ)過程的相關(guān)資料
- php調(diào)用mysql存儲(chǔ)過程
- MySQL 存儲(chǔ)過程的基本用法介紹
相關(guān)文章
ubuntu系統(tǒng)中Mysql ERROR 1045 (28000): Access denied for user ro
這篇文章主要介紹了ubuntu系統(tǒng)安裝mysql登陸提示 解決Mysql ERROR 1045 (28000): Access denied for user root@ localhost問題,需要的朋友可以參考下2017-05-05Navicat For MySQL的簡(jiǎn)單使用教程
這篇文章主要介紹了Navicat For MySQL的簡(jiǎn)單使用教程,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià),需要的朋友可以參考下2019-06-06MySQL 數(shù)據(jù)庫定時(shí)備份的幾種方式(全面)
在操作數(shù)據(jù)過程中,可能會(huì)導(dǎo)致數(shù)據(jù)錯(cuò)誤,甚至數(shù)據(jù)庫奔潰,而有效的定時(shí)備份能很好地保護(hù)數(shù)據(jù)庫。本篇文章主要講述了幾種方法進(jìn)行 MySQL 定時(shí)備份數(shù)據(jù)庫。2021-09-09SpringBoot中mysql的驅(qū)動(dòng)依賴問題小結(jié)
這篇文章主要介紹了SpringBoot中mysql的驅(qū)動(dòng)依賴問題,本文通過圖文示例代碼相結(jié)合給大家介紹的非常詳細(xì),需要的朋友可以參考下2023-05-05Window系統(tǒng)下自動(dòng)備份MySql數(shù)據(jù)庫方法
Window下可以使用Bat批處理文件來對(duì)MySql進(jìn)行備份操作,備份時(shí)一般數(shù)據(jù)量較大的情況可以使用復(fù)制文件的方式,但是這種方式要求服務(wù)器停機(jī)或者停止寫入命令,不大使用2012-11-11MySQL如何快速創(chuàng)建800w條測(cè)試數(shù)據(jù)表
這篇文章主要介紹了MySQL如何快速創(chuàng)建800w條測(cè)試數(shù)據(jù)表,下面文章圍繞MySQL創(chuàng)建測(cè)試數(shù)據(jù)表的相關(guān)資料展開詳細(xì)內(nèi)容,具有一的的參考價(jià)值,需要的小伙伴可以參考一下2022-03-03MySQL的match函數(shù)在sp中使用BUG解決分析
這篇文章主要為大家介紹了MySQL的match函數(shù)在sp中使用BUG解決分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07