mysql procedure怎么用
這個(gè)是存儲(chǔ)過(guò)程
比方說(shuō)要寫一個(gè)存儲(chǔ)過(guò)程,向庫(kù)里循環(huán)插入 500 條記錄
存儲(chǔ)過(guò)程如下:
delimiter$$;
createprocedurelucia_proc16(countint)
begin
DECLAREname_procVARCHAR(20)CHARACTERSETutf8;
DECLAREx_procVARCHAR(4)CHARACTERSETutf8;
DECLAREage_procINT(10);
DECLAREclass_procVARCHAR(20)CHARACTERSETutf8;
DECLAREAddr_procVARCHAR(50)CHARACTERSETutf8;
DECLAREiINT;
ti=1;
tx_proc='女';
tage_proc=20;
tclass_proc='初三(2)班';
tAddr_proc='北京市朝陽(yáng)區(qū)';
whilei<countdo
tname_proc=CONCAT('皮卡丘',i);
inrtintostudents(Name,Sex,age,class,Addr)values(name_proc,x_proc,age_proc,class_proc,Addr_proc);
ti=i+1;
endwhile;
end
$$;
delimiter;
調(diào)用這個(gè)存儲(chǔ)過(guò)程:
calllucia_proc16(500);
運(yùn)行效果就是向庫(kù)里插入了 500 條記錄
mysql 怎么創(chuàng)建procedure
其實(shí)也很簡(jiǎn)單的,直接給你一個(gè)例子,你依照著實(shí)現(xiàn) 一個(gè),然后再自己拓展就行了。
mysql代碼:
DELIMITER $$
DROP PROCEDURE IF EXISTS inrtInfo $$
CREATE PROCEDURE inrtInfo ()
BEGIN
-- 插入數(shù)據(jù)表
inrt into test (name) value ('admin') ;
END$$
DELIMITER ;
最后調(diào)用:call inrtInfo();
mysql中存儲(chǔ)過(guò)程是什么意思
存儲(chǔ)過(guò)程(stored
procedure)是一組為了完成特定功能的sql語(yǔ)句集,經(jīng)編譯后存儲(chǔ)在數(shù)據(jù)庫(kù)中,用戶通過(guò)指定存儲(chǔ)過(guò)程的名字并給定參數(shù)(如果該存儲(chǔ)過(guò)程帶有參數(shù))來(lái)調(diào)用執(zhí)行它。
一個(gè)存儲(chǔ)過(guò)程是一個(gè)可編程的函數(shù),它在數(shù)據(jù)庫(kù)中創(chuàng)建并保存。
MYSQL執(zhí)行PROCEDURE時(shí)報(bào)的1146錯(cuò)誤,求幫助
有兩種方法,一種方法使用mysql的check table和repair table 的sql語(yǔ)句,另一種方法是使用MySQL提供的多個(gè)myisamchk, isamchk數(shù)據(jù)檢測(cè)恢復(fù)工具。前者使用起來(lái)比較簡(jiǎn)便。推薦使用。
1. check table 和 repair table
登陸mysql 終端:
mysql -uxxxxx -p dbname
check table tabTest;
如果出現(xiàn)的結(jié)果說(shuō)Status是OK,則不用修復(fù),如果有Error,可以用:
repair table tabTest;
進(jìn)行修復(fù),修復(fù)之后可以在用check table命令來(lái)進(jìn)行檢查。在新版本的phpMyAdmin里面也可以使用check/repair的功能。
2. myisamchk, isamchk
其中myisamchk適用于MYISAM類型的數(shù)據(jù)表,而isamchk適用于ISAM類型的數(shù)據(jù)表。這兩條命令的主要參數(shù)相同,一般新的系統(tǒng)都使用MYISAM作為缺省的數(shù)據(jù)表類型,這里以myisamchk為例子進(jìn)行說(shuō)明。當(dāng)發(fā)現(xiàn)某個(gè)數(shù)據(jù)表出現(xiàn)問(wèn)題時(shí)可以使用:
myisamchk tablename.MYI
進(jìn)行檢測(cè),如果需要修復(fù)的話,可以使用:
myisamchk -of tablename.MYI
關(guān)于myisamchk的詳細(xì)參數(shù)說(shuō)明,可以參見(jiàn)它的使用幫助。需要注意的時(shí)在進(jìn)行修改時(shí)必須確保MySQL服務(wù)器沒(méi)有訪問(wèn)這個(gè)數(shù)據(jù)表,保險(xiǎn)的情況下是最好在進(jìn)行檢測(cè)時(shí)把MySQL服務(wù)器Shutdown掉。
-----------------------------
另外可以把下面的命令放在你的rc.local里面啟動(dòng)MySQL服務(wù)器前:
[ -x /tmp/mysql.sock ] && /pathtochk/myisamchk -of /DATA_DIR/*/*.MYI
其中的/tmp/mysql.sock是MySQL監(jiān)聽(tīng)的Sock文件位置,對(duì)于使用RPM安裝的用戶應(yīng)該是/var/lib/mysql/mysql.sock,對(duì)于使用源碼安裝則是/tmp/mysql.sock可以根據(jù)自己的實(shí)際情況進(jìn)行變更,而pathtochk則是myisamchk所在的位置,DATA_DIR是你的MySQL數(shù)據(jù)庫(kù)存放的位置。
需要注意的時(shí),如果你打算把這條命令放在你的rc.local里面,必須確認(rèn)在執(zhí)行這條指令時(shí)MySQL服務(wù)器必須沒(méi)有啟動(dòng)!檢測(cè)修復(fù)所有數(shù)據(jù)庫(kù)(表)
mysql怎樣使用存儲(chǔ)過(guò)程
給你個(gè)例子
drop procedure if exists call proc_temp;
delimiter $ //存儲(chǔ)過(guò)程從$ 開始
create procedure proc_temp(
IN startDate VARCHAR(20),//設(shè)置傳入的變量,沒(méi)有可以不要傳
IN endDate VARCHAR(20))
BEGIN
DECLARE dflag INT(11); //這里可以定義你需要的僅在存儲(chǔ)過(guò)程里使用的變量
SET dflag = 0;//初始化
lect * from table where time between startDate and endDate ;//你的sql語(yǔ)句,可以一句可以多句
END $//存儲(chǔ)過(guò)程從$ 結(jié)束
delimiter ;
當(dāng)上面的選中運(yùn)行后沒(méi)問(wèn)題,可以選中下面的call xx 運(yùn)行,上面的代碼沒(méi)有改動(dòng)的話只需要運(yùn)行一次
mysql 存儲(chǔ)過(guò)程怎么調(diào)用?
php調(diào)用mysql存儲(chǔ)過(guò)程和函數(shù)的方法
存儲(chǔ)過(guò)程和函數(shù)是MySql5.0剛剛引入的。關(guān)于這方面的操作在PHP里面沒(méi)有直接的支持。但是由于Mysql PHP API的設(shè)計(jì),使得我們可以在以前的PHP版本中的mysql php api中支持存儲(chǔ)過(guò)程和函數(shù)的調(diào)用。
在php中調(diào)用存儲(chǔ)過(guò)程和函數(shù)。
1。調(diào)用存儲(chǔ)過(guò)程的方法。
a。如果存儲(chǔ)過(guò)程有 IN/INOUT參數(shù),聲明一個(gè)變量,輸入?yún)?shù)給存儲(chǔ)過(guò)程,該變量是一對(duì),
一個(gè)php變量(也可以不必,只是沒(méi)有php變量時(shí),沒(méi)有辦法進(jìn)行動(dòng)態(tài)輸入),一個(gè)Mysql
變量。
b。如果存儲(chǔ)過(guò)程有OUT變量,聲明一個(gè)Mysql變量。
mysql變量的聲明比較特殊,必須讓mysql服務(wù)器知道此變量的存在,其實(shí)也就是執(zhí)行一條mysql語(yǔ)句。
入t @mysqlvar=$phpvar ;
c。使用mysql_query()/mysql_db_query()執(zhí)行mysql 變量聲明語(yǔ)句。
mysql_query("t @mysqlvar=$pbpvar");
這樣,在mysql服務(wù)器里面就有一個(gè)變量,@mysqlar。如果是IN參數(shù),那么其值可以由phpar傳入。
d。 如果是存儲(chǔ)過(guò)程。
1。執(zhí)行 call procedure()語(yǔ)句。
也就是mysql_query("call proceduer([var1]...)");
2. 如果有返回值,執(zhí)行l(wèi)ect @ar,返回執(zhí)行結(jié)果。
mysql_query("lect @var)"
接下來(lái)的操作就和php執(zhí)行一般的mysql語(yǔ)句一樣了。可以通過(guò)mydql_fetch_row()等函數(shù)獲得結(jié)果。
如果時(shí)函數(shù)。 直接執(zhí)行 lect function() 就可以了。
$host="localhost";
$ur="root";
$password="11212";
$db="samp_db";
$dblink=mysql_connect($host,$ur,$password)
or die("can't connect to mysql");
mysql_lect_db($db,$dblink)
or die("can't lect samp_db");
$res=mysql_query("t @a=$password",$dblink);
$res=mysql_query("call aa(@a)",$dblink);
$res=mysql_query("lect @a",$dblink);
$row=mysql_fetch_row($res);
echo $row[0];