mysql存儲(chǔ)過(guò)程實(shí)例詳解 mysql為什么沒(méi)有存儲(chǔ)過(guò)程?
mysql為什么沒(méi)有存儲(chǔ)過(guò)程?創(chuàng)建存儲(chǔ)過(guò)程mysql> delimiter $ -- delimiter $是設(shè)置 $為命令終止符號(hào),代替默認(rèn)的分號(hào),因?yàn)榉痔?hào)有其他用處.mysql> crea
mysql為什么沒(méi)有存儲(chǔ)過(guò)程?
創(chuàng)建存儲(chǔ)過(guò)程mysql> delimiter $ -- delimiter $是設(shè)置 $為命令終止符號(hào),代替默認(rèn)的分號(hào),因?yàn)榉痔?hào)有其他用處.mysql> create procedure sp_test(IN pi_id int, OUT po_name varchar(10))-> begin-> select * from test.tb_test-> select tb_test.name into po_name from test.tb_test where tb_test.id = pi_id-> end-> $Query OK, 0 rows affected (0.00 sec)mysql> delimiter -- 恢復(fù)分號(hào)作為分隔終止符號(hào)5.調(diào)用存儲(chǔ)過(guò)程mysql> set @po_name=""Query OK, 0 rows affected (0.00 sec)mysql> call sp_test(1,@po_name)
為什么mysql的存儲(chǔ)過(guò)程調(diào)用一次會(huì)運(yùn)行多次?
在sqlyog中,調(diào)用了一次call我的存儲(chǔ)過(guò)程(入?yún)?然后,在mysql中執(zhí)行showfullprocesslist進(jìn)行查看發(fā)現(xiàn)有兩個(gè)連接在同時(shí)執(zhí)行我的存儲(chǔ)過(guò)程中的語(yǔ)句(別的是不可能出現(xiàn)那些sql語(yǔ)句的)而且經(jīng)過(guò)執(zhí)行后的結(jié)果來(lái)看,執(zhí)行后的數(shù)據(jù)為正常數(shù)據(jù)的兩倍。然后將存儲(chǔ)過(guò)程中的sql語(yǔ)句進(jìn)行逆運(yùn)算(比如,加變成減),然后再執(zhí)行,發(fā)現(xiàn)數(shù)據(jù)恢復(fù)為正常數(shù)據(jù)了。