mysql調(diào)試存儲(chǔ)過(guò)程具體方法:

成都創(chuàng)新互聯(lián)成立于2013年,我們提供高端網(wǎng)站建設(shè)、成都網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)、網(wǎng)站定制、成都營(yíng)銷網(wǎng)站建設(shè)、小程序開(kāi)發(fā)、微信公眾號(hào)開(kāi)發(fā)、成都網(wǎng)站推廣服務(wù),提供專業(yè)營(yíng)銷思路、內(nèi)容策劃、視覺(jué)設(shè)計(jì)、程序開(kāi)發(fā)來(lái)完成項(xiàng)目落地,為三輪攪拌車企業(yè)提供源源不斷的流量和訂單咨詢。
在你的存儲(chǔ)過(guò)程中加入如下語(yǔ)句:
SELECT 變量1,變量2;
然后用mysql自帶的cmd程序進(jìn)入mysql 下。
call 你的存儲(chǔ)過(guò)程名(輸入?yún)?shù)1,@輸出參數(shù));(注:這里幫助下新同學(xué),如果你的存儲(chǔ)過(guò)程有輸出變量,那么在這里只需要加 @ 然后跟任意變量名即可);
即可發(fā)現(xiàn)你的變量值被打印到了cmd下
在MYSQL 中 終于引入了存儲(chǔ)過(guò)程這一新特性 這將大大增強(qiáng)MYSQL 的數(shù)據(jù)庫(kù)處理能力 在本文中 將指導(dǎo)讀者快速掌握MYSQL 的存儲(chǔ)過(guò)程的基本知識(shí) 帶領(lǐng)用戶入門
存儲(chǔ)過(guò)程介紹
存儲(chǔ)過(guò)程是一組為了完成特定功能的SQL語(yǔ)句集 經(jīng)編譯后存儲(chǔ)在數(shù)據(jù)庫(kù)中 用戶通過(guò)指定存儲(chǔ)過(guò)程的名字并給出參數(shù)(如果該存儲(chǔ)過(guò)程帶有參數(shù))來(lái)執(zhí)行它 存儲(chǔ)過(guò)程可由應(yīng)用程序通過(guò)一個(gè)調(diào)用來(lái)執(zhí)行 而且允許用戶聲明變量 同時(shí) 存儲(chǔ)過(guò)程可以接收和輸出參數(shù) 返回執(zhí)行存儲(chǔ)過(guò)程的狀態(tài)值 也可以嵌套調(diào)用
存儲(chǔ)過(guò)程的優(yōu)點(diǎn)
作為存儲(chǔ)過(guò)程 有以下這些優(yōu)點(diǎn)
( )減少網(wǎng)絡(luò)通信量 調(diào)用一個(gè)行數(shù)不多的存儲(chǔ)過(guò)程與直接調(diào)用SQL語(yǔ)句的網(wǎng)絡(luò)通信量可能不會(huì)有很大的差別 可是如果存儲(chǔ)過(guò)程包含上百行SQL語(yǔ)句 那么其性能絕對(duì)比一條一條的調(diào)用SQL語(yǔ)句要高得多
( )執(zhí)行速度更快 存儲(chǔ)過(guò)程創(chuàng)建的時(shí)候 數(shù)據(jù)庫(kù)已經(jīng)對(duì)其進(jìn)行了一次解析和優(yōu)化 其次 存儲(chǔ)過(guò)程一旦執(zhí)行 在內(nèi)存中就會(huì)保留一份這個(gè)存儲(chǔ)過(guò)程 這樣下次再執(zhí)行同樣的存儲(chǔ)過(guò)程時(shí) 可以從內(nèi)存中直接中讀取
( )更強(qiáng)的安全性 存儲(chǔ)過(guò)程是通過(guò)向用戶授予權(quán)限(而不是基于表) 它們可以提供對(duì)特定數(shù)據(jù)的訪問(wèn) 提高代碼安全 比如防止 SQL注入
( ) 業(yè)務(wù)邏輯可以封裝存儲(chǔ)過(guò)程中 這樣不僅容易維護(hù) 而且執(zhí)行效率也高
當(dāng)然存儲(chǔ)過(guò)程也有一些缺點(diǎn) 比如
可移植性方面 當(dāng)從一種數(shù)據(jù)庫(kù)遷移到另外一種數(shù)據(jù)庫(kù)時(shí) 不少的存儲(chǔ)過(guò)程的編寫要進(jìn)行部分修改
存儲(chǔ)過(guò)程需要花費(fèi)一定的學(xué)習(xí)時(shí)間去學(xué)習(xí) 比如學(xué)習(xí)其語(yǔ)法等
在MYSQL中 推薦使用MYSQL Query Browswer()這個(gè)工具去進(jìn)行存儲(chǔ)過(guò)程的開(kāi)發(fā)和管理 下面分步驟來(lái)學(xué)習(xí)MYSQL中的存儲(chǔ)過(guò)程
定義存儲(chǔ)過(guò)程的結(jié)束符
在存儲(chǔ)過(guò)程中 通常要輸入很多SQL語(yǔ)句 而SQL語(yǔ)句中每個(gè)語(yǔ)句以分號(hào)來(lái)結(jié)束 因此要告訴存儲(chǔ)過(guò)程 什么位置是意味著整個(gè)存儲(chǔ)過(guò)程結(jié)束 所以我們?cè)诰帉懘鎯?chǔ)過(guò)程前 先定義分隔符 我們這里定義 // 為分隔符 我們使用DELIMITER //這樣的語(yǔ)法 就可以定義結(jié)束符了 當(dāng)然你可以自己定義其他喜歡的符號(hào)
如何創(chuàng)建存儲(chǔ)過(guò)程
下面先看下一個(gè)簡(jiǎn)單的例子 代碼如下
DELIMITER?//CREATEPROCEDURE?`p ` ()LANGUAGE SQLDETERMINISTICSQL SECURITY DEFINERMENT? A procedure BEGINSELECT Hello World ! ;END//
下面講解下存儲(chǔ)過(guò)程的組成部分
)首先在定義好終結(jié)符后 使用CREATE PROCEDURE+存儲(chǔ)過(guò)程名的方法創(chuàng)建存儲(chǔ)過(guò)程 LANGUAGE選項(xiàng)指定了使用的語(yǔ)言 這里默認(rèn)是使用SQL
)DETERMINISTIC關(guān)鍵詞的作用是 當(dāng)確定每次的存儲(chǔ)過(guò)程的輸入和輸出都是相同的內(nèi)容時(shí) 可以使用該關(guān)鍵詞 否則默認(rèn)為NOT DETERMINISTIC
) SQL SECURITY關(guān)鍵詞 是表示調(diào)用時(shí)檢查用戶的權(quán)限 當(dāng)值為INVOKER時(shí) 表示是用戶調(diào)用該存儲(chǔ)過(guò)程時(shí)檢查 默認(rèn)為DEFINER 即創(chuàng)建存儲(chǔ)過(guò)程時(shí)檢查
) MENT部分是存儲(chǔ)過(guò)程的注釋說(shuō)明部分
lishixinzhi/Article/program/MySQL/201404/30557
mysql存儲(chǔ)過(guò)程的基本用法有哪些
在外部程序訪問(wèn)數(shù)據(jù)庫(kù)時(shí)(例如 PHP),要組織很多 SQL 語(yǔ)句。
特別是業(yè)務(wù)邏輯復(fù)雜的時(shí)候,一大堆的 SQL 和條件夾雜在 PHP 代碼中,讓人不寒而栗。現(xiàn)在有了 MySQL 存儲(chǔ)過(guò)程,業(yè)務(wù)邏輯可以封裝存儲(chǔ)過(guò)程中,這樣不僅容易維護(hù),而且執(zhí)行效率也高。
一、MySQL 創(chuàng)建存儲(chǔ)過(guò)程
"pr_add" 是個(gè)簡(jiǎn)單的 MySQL 存儲(chǔ)過(guò)程,這個(gè)MySQL 存儲(chǔ)過(guò)程有兩個(gè) int 類型的輸入?yún)?shù) "a"、"b",返回這兩個(gè)參數(shù)的和。
復(fù)制代碼 代碼如下:
drop procedure if exists pr_add;
計(jì)算兩個(gè)數(shù)之和
復(fù)制代碼 代碼如下:
create procedure pr_add
(
a int,
b int
)
begin
declare c int;
if a is null then
set a = 0;
end if;
if b is null then
set b = 0;
end if;
set c = a + b;
select c as sum;
/*
return c;
不能在 MySQL 存儲(chǔ)過(guò)程中使用。return 只能出現(xiàn)在函數(shù)中。
*/
end;
二、調(diào)用 MySQL 存儲(chǔ)過(guò)程
復(fù)制代碼 代碼如下:
call pr_add(10, 20);
執(zhí)行 MySQL 存儲(chǔ)過(guò)程,存儲(chǔ)過(guò)程參數(shù)為 MySQL 用戶變量。
復(fù)制代碼 代碼如下:
set @a = 10;
set @b = 20;
call pr_add(@a, @b);
三、MySQL 存儲(chǔ)過(guò)程特點(diǎn)
創(chuàng)建 MySQL 存儲(chǔ)過(guò)程的簡(jiǎn)單語(yǔ)法為:
復(fù)制代碼 代碼如下:
create procedure 存儲(chǔ)過(guò)程名字()
(
[in|out|inout] 參數(shù) datatype
)
begin
MySQL 語(yǔ)句;
end;
MySQL 存儲(chǔ)過(guò)程參數(shù)如果不顯式指定"in"、"out"、"inout",則默認(rèn)為"in"。習(xí)慣上,對(duì)于是"in" 的參數(shù),我們都不會(huì)顯式指定。
1. MySQL 存儲(chǔ)過(guò)程名字后面的"()"是必須的,即使沒(méi)有一個(gè)參數(shù),也需要"()"
2. MySQL 存儲(chǔ)過(guò)程參數(shù),不能在參數(shù)名稱前加"@",如:"@a int"。下面的創(chuàng)建存儲(chǔ)過(guò)程語(yǔ)法在 MySQL 中是錯(cuò)誤的(在 SQL Server 中是正確的)。 MySQL 存儲(chǔ)過(guò)程中的變量,不需要在變量名字前加"@",雖然 MySQL 客戶端用戶變量要加個(gè)"@"。
復(fù)制代碼 代碼如下:
create procedure pr_add
(
@a int, -- 錯(cuò)誤
b int -- 正確
)
3. MySQL 存儲(chǔ)過(guò)程的參數(shù)不能指定默認(rèn)值。
4. MySQL 存儲(chǔ)過(guò)程不需要在 procedure body 前面加 "as"。而 SQL Server 存儲(chǔ)過(guò)程必須加 "as" 關(guān)鍵字。
復(fù)制代碼 代碼如下:
create procedure pr_add
(
a int,
b int
)
as -- 錯(cuò)誤,MySQL 不需要 "as"
begin
mysql statement ...;
end;
5. 如果 MySQL 存儲(chǔ)過(guò)程中包含多條 MySQL 語(yǔ)句,則需要 begin end 關(guān)鍵字。
復(fù)制代碼 代碼如下:
create procedure pr_add
(
a int,
b int
)
begin
mysql statement 1 ...;
mysql statement 2 ...;
end;
6. MySQL 存儲(chǔ)過(guò)程中的每條語(yǔ)句的末尾,都要加上分號(hào) ";"
復(fù)制代碼 代碼如下:
...
declare c int;
if a is null then
set a = 0;
end if;
...
end;
7. MySQL 存儲(chǔ)過(guò)程中的注釋。
復(fù)制代碼 代碼如下:
/*
這是個(gè)
多行 MySQL 注釋。
*/
declare c int; -- 這是單行 MySQL 注釋 (注意 -- 后至少要有一個(gè)空格)
if a is null then # 這也是個(gè)單行 MySQL 注釋
set a = 0;
end if;
方法一 進(jìn)入命令行
mysql –u用戶名 –p密碼 –D數(shù)據(jù)庫(kù)【sql腳本文件路徑全名】,示例:
mysql –uroot –p123456 -Dtest /home/zj/create_table.sql
注意:
如果在sql腳本文件中使用了use 數(shù)據(jù)庫(kù),則-D數(shù)據(jù)庫(kù)選項(xiàng)可以忽略
方法二 進(jìn)入mysql的控制臺(tái)后,使用source命令執(zhí)行
Mysqlsource 【sql腳本文件的路徑全名】 或 Mysql\. 【sql腳本文件的路徑全名】,示例:
source /home/zj/create_table.sql
分享題目:mysql怎么下存儲(chǔ)過(guò)程 mysql存儲(chǔ)過(guò)程入門
URL鏈接:http://chinadenli.net/article16/ddgcodg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供Google、網(wǎng)站設(shè)計(jì)、微信小程序、云服務(wù)器、網(wǎng)站策劃、建站公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)