mysql存儲過程判斷
1. mysql 存儲過程中的 if exists 判斷問題
SELECT沒有IF EXISTS 語法,你可以用select count(*) from information_schema.tables where table_schema='your_schema' and table_name='your_tab';看返回0還是1來判斷。
2. mysql存儲過程的if判斷有多個條件該怎麼優化效率
這個應該不會太慢吧,我建議你看一下,你是不是循環做了太多次的插入/更新操作。
mysql默認的配置中,每次事務提交都要寫binlog和redo log,如果循環太多次——比如循環插入10w條記錄——就會非常慢。一般優化思路分兩種:
1 修改 sync_binlog為一個100-1000間的值,讓binlog每隔100-1000個事務後再寫一次;修改innodb_flush_log_at_trx_commit =2; 這么搞的好處是降低了寫log的次數和消耗的時間,缺點是,中間出錯的話,會丟失一部分的binlog和redolog導致無法通過他們來在出問題是恢復生產庫數據。
2 將所有的插入/更新操作放到一個事務中進行。這樣,顯然就只需要一次寫binlong和redolog咯。
3. mysql 存儲過程中if控制語句的條件判斷問題
if (@num1 < @time)
AND (@num2 < @time)
AND (@num3 < @time)
then
4. mysql 存儲過程總結(二)if語句、參數
1、if :用於做條件判斷,具體的語法結構為:
在if條件判斷的結構中,ELSE IF 結構可以有多個,也可以沒有。 ELSE結構可以有,也可以沒有。
案列:
根據定義的分數score變數,判定當前分數對應的分數等級。
score >= 90分,等級為優秀。
score >= 80分,等級為良好
score >= 60分,等級為及格
score < 60分,等級為不及格。
上述的需求我們雖然已經實現了,但是也存在一些問題,比如:score 分數我們是在存儲過程中定義 死的,而且最終計算出來的分數等級,我們也僅僅是最終查詢展示出來而已。
那麼我們能不能,把score分數動態的傳遞進來,計算出來的分數等級是否可以作為返回值返回呢? 答案是肯定的,我們可以通過接下來所講解的 參數 來解決上述的問題。
2、參數的類型
主要分為以下三種:IN、OUT、INOUT。 具體的含義如下:
(1)in :該類參數作為輸入,也就是需要調用時傳入值 默認
(2)out:該類參數作為輸出,也就是該參數可以作為返回值
(3)inout:既可以作為輸入參數,也可以作為輸出參數
用法:
案例一:
案列二:
5. mysql在存儲過程中先判斷資料庫中是否存在table1表,有就刪除,沒有就新建
是的 這個主要是在增刪改查的時候用到
if TABLE1 EXISTING DROP TABLE1;
CREATE TABLE
6. mysql建立存儲過程中如何判斷一個數字的正負並使用select輸出
CREATE PROCEDURE testproc (IN v_i integer )
BEGIN
if v_i > 0 then
select v_i as '負數';
else
select v_i as '正數';
end if;
END$$
delimiter ;