MySQL儲存過程使用if子查詢判斷需要注意
MySQL儲存過程
環境 5.6.14
有時候為了省事,在if中使用子查詢返回一個值,然後做比較.
就像上述的測試過程.
但是實際執行的時候,過程返回true.基本上忽略了select 的結果,都進入了true的分支.
我覺得MySQL是把where後面的判斷作為了比較的內容,上述過程比較的似乎是 if ((1=1)<5),所以無論查詢的是什麼,都進入了true的分支
解決這個問題的方法也很簡單.給子查詢加括號
子查詢加了括號之後的結果,就正確了,如下圖所示.
這不一定是MySQL的bug,但是使用的時候一定需要注意..
環境 5.6.14
-
drop procedure if exists p;
-
DELIMITER $$
-
-
CREATE PROCEDURE `p` ()
-
BEGIN
-
start transaction;
-
if(select 10 from dual where 1=1 < 5 ) then
-
select 'true';
-
else
-
select 'false';
-
end if;
-
commit;
-
END $$
-
-
DELIMITER ;
-
-
- call p
有時候為了省事,在if中使用子查詢返回一個值,然後做比較.
就像上述的測試過程.
但是實際執行的時候,過程返回true.基本上忽略了select 的結果,都進入了true的分支.
我覺得MySQL是把where後面的判斷作為了比較的內容,上述過程比較的似乎是 if ((1=1)<5),所以無論查詢的是什麼,都進入了true的分支
解決這個問題的方法也很簡單.給子查詢加括號
子查詢加了括號之後的結果,就正確了,如下圖所示.
這不一定是MySQL的bug,但是使用的時候一定需要注意..
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29254281/viewspace-2142478/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SQLServer查詢使用者儲存過程SQLServer儲存過程
- 儲存過程呼叫其他模式的儲存過程需要注意的地方儲存過程模式
- 儲存過程模糊查詢(like)儲存過程
- 查詢儲存過程報錯資訊儲存過程
- MySQL儲存過程詳解 mysql 儲存過程MySql儲存過程
- Mysql 儲存過程的使用MySql儲存過程
- 儲存過程結果進行查詢 select 存過過程儲存過程
- MySQL儲存過程詳解 mysql 儲存過程linkMySql儲存過程
- 儲存過程注意事項儲存過程
- oracle plsql儲存過程_if判斷與事務commitOracleSQL儲存過程MIT
- Laravel 中使用 MySQL 儲存過程LaravelMySql儲存過程
- mysql 遊標的使用(儲存過程)MySql儲存過程
- Mysql 儲存過程MySql儲存過程
- 帶有儲存過程的組合查詢儲存過程
- Oracle服務啟動-索引-子查詢-分頁儲存過程問題Oracle索引儲存過程
- MySQL儲存過程的建立和使用MySql儲存過程
- MySQL5儲存過程使用(轉)MySql儲存過程
- MySql儲存過程—2、第一個MySql儲存過程的建立MySql儲存過程
- mysql儲存過程整理MySql儲存過程
- MySQL之儲存過程MySql儲存過程
- [MYSQL -23儲存過程]MySql儲存過程
- MYSQL儲存過程管理MySql儲存過程
- mysql儲存過程例子MySql儲存過程
- mysql的儲存過程MySql儲存過程
- 查詢某個儲存過程有哪些內容儲存過程
- 在Oracle中查詢儲存過程和函式Oracle儲存過程函式
- 【sqlserver】查詢阻塞儲存過程sp_who_lockSQLServer儲存過程
- JAVA + Oracle儲存過程返回查詢結果集JavaOracle儲存過程
- 使用儲存過程儲存過程
- 【Mysql】Mysql儲存過程學習MySql儲存過程
- Mysql儲存過程中使用多遊標MySql儲存過程
- 如何查詢一個儲存過程是否在執行儲存過程
- 查詢多張表記錄數的儲存過程儲存過程
- mysql如何呼叫儲存過程MySql儲存過程
- mysql儲存過程案例解析MySql儲存過程
- mysql儲存過程詳解MySql儲存過程
- mysql儲存過程的修改MySql儲存過程
- MySQL儲存過程SAVEPOINT ROLLBACK toMySql儲存過程