mysql怎么用 MYSQL存儲(chǔ)過程能返回結(jié)果集嗎?
MYSQL存儲(chǔ)過程能返回結(jié)果集嗎?可以,存儲(chǔ)過程只是把你的查詢語(yǔ)句形成一個(gè)固定的格式,這樣你要查詢的時(shí)候就不用每次都執(zhí)行查詢語(yǔ)句了,sql在執(zhí)行的時(shí)候都會(huì)將你的sql語(yǔ)句轉(zhuǎn)換為字節(jié)碼,然后機(jī)器才能運(yùn)行
MYSQL存儲(chǔ)過程能返回結(jié)果集嗎?
可以,存儲(chǔ)過程只是把你的查詢語(yǔ)句形成一個(gè)固定的格式,這樣你要查詢的時(shí)候就不用每次都執(zhí)行查詢語(yǔ)句了,sql在執(zhí)行的時(shí)候都會(huì)將你的sql語(yǔ)句轉(zhuǎn)換為字節(jié)碼,然后機(jī)器才能運(yùn)行,存儲(chǔ)過程就節(jié)省了這一步,已經(jīng)形成了字節(jié)碼,所以速度才會(huì)快,特別是執(zhí)行次數(shù)比較多的時(shí)候,可以節(jié)省很多時(shí)間
mysql存儲(chǔ)過程傳入一個(gè)參數(shù)返回結(jié)果集?
mysql中要獲得存儲(chǔ)過程的返回值,可以增加一個(gè)out參數(shù),用來(lái)返回。mysql中存儲(chǔ)過程的例子:CREATE PROCEDURE addvoucher (IN userid INT,IN voucherid INT,OUT result INT)BEGINSELECT@endate_a := endate ,@batch_a := batch ,@c_count_a := c_count,@isdead_a := isdeadFROMt_voucherWHEREid = voucheridSET autocommit = 0IF EXISTS (SELECT*FROMt_user_voucher tuv,t_voucher tvWHEREtv.id = tuv.voucheridAND tv.batch =@batch_a) THENSET result = 1-- 已存在SELECTresultELSEIF @c_count_a > 0 THENIF (TO_DAYS(@endate_a) - TO_DAYS(NOW())) > 0 THEN
mysql優(yōu)化教程?
1、對(duì)SQL語(yǔ)句、索引、表結(jié)構(gòu)等進(jìn)行優(yōu)化。
2、開啟查詢緩存,Query Cache緩存了SELECT查詢及其結(jié)果數(shù)據(jù)集,當(dāng)執(zhí)行一個(gè)同樣的SELECT查詢時(shí),MySQL會(huì)從內(nèi)存中直接取出結(jié)果,加快了查詢執(zhí)行速度、減小了數(shù)據(jù)庫(kù)的壓力。執(zhí)行SHOW VARIABLES LIKE "have_query_cache"可以查看MySQL查詢緩存是否打開,開啟查詢緩存只需配置my.cnf文件即可,具體如下:
query_cache_type = 1
query_cache_size = 128M
query_cache_limit = 1M
保存好后重啟MySQL。
3、選用InnoDB存儲(chǔ)引擎,MySQL常用存儲(chǔ)引擎是MyISAM和InnoDB,二者區(qū)別如下:
MyISAM
查詢速度快;
支持表級(jí)鎖,在上鎖期間表上不能進(jìn)行其他操作;
支持全文檢索;
支持?jǐn)?shù)據(jù)壓縮、自我復(fù)制、查詢緩存、數(shù)據(jù)加密;
不支持外鍵;
不支持事務(wù),所以也就沒有COMMIT和ROLLBACK操作;
不支持集群數(shù)據(jù)庫(kù)。
InnoDB
支持行級(jí)鎖;
支持外鍵,對(duì)外鍵約束強(qiáng)制;
支持事務(wù),可執(zhí)行COMMIT和ROLLBACK操作;
支持?jǐn)?shù)據(jù)壓縮、自我復(fù)制、查詢緩存、數(shù)據(jù)加密;
可用在集群環(huán)境,但并不完全支持。InnoDB表可以轉(zhuǎn)換為NDB存儲(chǔ)引擎,這樣就能用在集群環(huán)境。