方法一:(直接查詢,比較實用,查看當(dāng)前自定義的存儲過程)
站在用戶的角度思考問題,與客戶深入溝通,找到江門網(wǎng)站設(shè)計與江門網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設(shè)計與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:做網(wǎng)站、網(wǎng)站設(shè)計、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣、主機域名、網(wǎng)頁空間、企業(yè)郵箱。業(yè)務(wù)覆蓋江門地區(qū)。
select `specific_name` from MySQL.proc where `db` = 'your_db_name' and `type` = 'procedure'
方法二:(查看數(shù)據(jù)庫里所有存儲過程+內(nèi)容)
show procedure status;
方法三:(查看當(dāng)前數(shù)據(jù)庫里存儲過程列表)
select specific_name from mysql.proc ;
方法四:(查看某一個存儲過程的具體內(nèi)容)
select body from mysql.proc where specific_name = 'your_proc_name';
查看存儲過程或函數(shù)的創(chuàng)建代碼 :
show create procedure your_proc_name;
show create function your_func_name;
php調(diào)用mysql存儲過程和函數(shù)的方法
存儲過程和函數(shù)是MySql5.0剛剛引入的。關(guān)于這方面的操作在PHP里面沒有直接的支持。但是由于Mysql PHP API的設(shè)計,使得我們可以在以前的PHP版本中的mysql php api中支持存儲過程和函數(shù)的調(diào)用。
在php中調(diào)用存儲過程和函數(shù)。
1。調(diào)用存儲過程的方法。
a。如果存儲過程有 IN/INOUT參數(shù),聲明一個變量,輸入?yún)?shù)給存儲過程,該變量是一對,
一個php變量(也可以不必,只是沒有php變量時,沒有辦法進行動態(tài)輸入),一個Mysql
變量。
b。如果存儲過程有OUT變量,聲明一個Mysql變量。
mysql變量的聲明比較特殊,必須讓mysql服務(wù)器知道此變量的存在,其實也就是執(zhí)行一條mysql語句。
入set @mysqlvar=$phpvar ;
c。使用mysql_query()/mysql_db_query()執(zhí)行mysql 變量聲明語句。
mysql_query("set @mysqlvar=$pbpvar");
這樣,在mysql服務(wù)器里面就有一個變量,@mysqlar。如果是IN參數(shù),那么其值可以由phpar傳入。
d。 如果是存儲過程。
1。執(zhí)行 call procedure()語句。
也就是mysql_query("call proceduer([var1]...)");
2. 如果有返回值,執(zhí)行select @ar,返回執(zhí)行結(jié)果。
mysql_query("select @var)"
接下來的操作就和php執(zhí)行一般的mysql語句一樣了??梢酝ㄟ^mydql_fetch_row()等函數(shù)獲得結(jié)果。
如果時函數(shù)。 直接執(zhí)行 select function() 就可以了。
$host="localhost";
$user="root";
$password="11212";
$db="samp_db";
$dblink=mysql_connect($host,$user,$password)
or die("can't connect to mysql");
mysql_select_db($db,$dblink)
or die("can't select samp_db");
$res=mysql_query("set @a=$password",$dblink);
$res=mysql_query("call aa(@a)",$dblink);
$res=mysql_query("select @a",$dblink);
$row=mysql_fetch_row($res);
echo $row[0];
第1步:
打開mysqml文件夾,顯示的文件如下,然后找到my.ini文件,如圖所示。
第2步:
選中my.ini文件,這時候點擊鼠標(biāo)右鍵依次選擇”打開方式“然后選擇”記事本打開“
第3步:
以記事本的方式打開my.ini文件后,按ctrl+f搜索”datadir“就可以找到你數(shù)據(jù)庫的物理路徑
第4步:
如果你想修改數(shù)據(jù)庫文件的存儲位置,可以直接在這里修改,如下圖紅框所示。
第5步:
按照上面所找到的路徑,我們打開上面的路徑的data文件夾,顯示如下圖。
第6步:
如果想對數(shù)據(jù)庫進行搬遷,只需要復(fù)制”data“這個文件夾,覆蓋新環(huán)境下的”data“文件就可以了。
在MYSQL 中 終于引入了存儲過程這一新特性 這將大大增強MYSQL 的數(shù)據(jù)庫處理能力 在本文中 將指導(dǎo)讀者快速掌握MYSQL 的存儲過程的基本知識 帶領(lǐng)用戶入門
存儲過程介紹
存儲過程是一組為了完成特定功能的SQL語句集 經(jīng)編譯后存儲在數(shù)據(jù)庫中 用戶通過指定存儲過程的名字并給出參數(shù)(如果該存儲過程帶有參數(shù))來執(zhí)行它 存儲過程可由應(yīng)用程序通過一個調(diào)用來執(zhí)行 而且允許用戶聲明變量 同時 存儲過程可以接收和輸出參數(shù) 返回執(zhí)行存儲過程的狀態(tài)值 也可以嵌套調(diào)用
存儲過程的優(yōu)點
作為存儲過程 有以下這些優(yōu)點
( )減少網(wǎng)絡(luò)通信量 調(diào)用一個行數(shù)不多的存儲過程與直接調(diào)用SQL語句的網(wǎng)絡(luò)通信量可能不會有很大的差別 可是如果存儲過程包含上百行SQL語句 那么其性能絕對比一條一條的調(diào)用SQL語句要高得多
( )執(zhí)行速度更快 存儲過程創(chuàng)建的時候 數(shù)據(jù)庫已經(jīng)對其進行了一次解析和優(yōu)化 其次 存儲過程一旦執(zhí)行 在內(nèi)存中就會保留一份這個存儲過程 這樣下次再執(zhí)行同樣的存儲過程時 可以從內(nèi)存中直接中讀取
( )更強的安全性 存儲過程是通過向用戶授予權(quán)限(而不是基于表) 它們可以提供對特定數(shù)據(jù)的訪問 提高代碼安全 比如防止 SQL注入
( ) 業(yè)務(wù)邏輯可以封裝存儲過程中 這樣不僅容易維護 而且執(zhí)行效率也高
當(dāng)然存儲過程也有一些缺點 比如
可移植性方面 當(dāng)從一種數(shù)據(jù)庫遷移到另外一種數(shù)據(jù)庫時 不少的存儲過程的編寫要進行部分修改
存儲過程需要花費一定的學(xué)習(xí)時間去學(xué)習(xí) 比如學(xué)習(xí)其語法等
在MYSQL中 推薦使用MYSQL Query Browswer()這個工具去進行存儲過程的開發(fā)和管理 下面分步驟來學(xué)習(xí)MYSQL中的存儲過程
定義存儲過程的結(jié)束符
在存儲過程中 通常要輸入很多SQL語句 而SQL語句中每個語句以分號來結(jié)束 因此要告訴存儲過程 什么位置是意味著整個存儲過程結(jié)束 所以我們在編寫存儲過程前 先定義分隔符 我們這里定義 // 為分隔符 我們使用DELIMITER //這樣的語法 就可以定義結(jié)束符了 當(dāng)然你可以自己定義其他喜歡的符號
如何創(chuàng)建存儲過程
下面先看下一個簡單的例子 代碼如下
DELIMITER?//CREATEPROCEDURE?`p ` ()LANGUAGE SQLDETERMINISTICSQL SECURITY DEFINERMENT? A procedure BEGINSELECT Hello World ! ;END//
下面講解下存儲過程的組成部分
)首先在定義好終結(jié)符后 使用CREATE PROCEDURE+存儲過程名的方法創(chuàng)建存儲過程 LANGUAGE選項指定了使用的語言 這里默認是使用SQL
)DETERMINISTIC關(guān)鍵詞的作用是 當(dāng)確定每次的存儲過程的輸入和輸出都是相同的內(nèi)容時 可以使用該關(guān)鍵詞 否則默認為NOT DETERMINISTIC
) SQL SECURITY關(guān)鍵詞 是表示調(diào)用時檢查用戶的權(quán)限 當(dāng)值為INVOKER時 表示是用戶調(diào)用該存儲過程時檢查 默認為DEFINER 即創(chuàng)建存儲過程時檢查
) MENT部分是存儲過程的注釋說明部分
lishixinzhi/Article/program/MySQL/201404/30557