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儲存過程
- Mysql 儲存過程的使用MySql儲存過程
- Laravel 中使用 MySQL 儲存過程LaravelMySql儲存過程
- mysql 儲存過程MySql儲存過程
- 23. 使用MySQL之使用儲存過程MySql儲存過程
- MySQL儲存過程中如何使用ROLLBACKMySql儲存過程
- MySQL儲存過程的建立和使用MySql儲存過程
- Oracle服務啟動-索引-子查詢-分頁儲存過程問題Oracle索引儲存過程
- MySQL---------儲存過程MySql儲存過程
- mysql儲存過程整理MySql儲存過程
- MySQL之儲存過程MySql儲存過程
- Mysql儲存過程中使用多遊標MySql儲存過程
- mysql如何呼叫儲存過程MySql儲存過程
- Ms Sql Server查詢儲存過程中的內容SQLServer儲存過程
- 如何查詢一個儲存過程是否在執行儲存過程
- 【MSSQL】sqlserver 各種判斷是否存在(表名、函式、儲存過程.......)SQLServer函式儲存過程
- Mysql使用儲存過程快速新增百萬資料MySql儲存過程
- mySql 儲存過程與函式MySql儲存過程函式
- MySQL 儲存過程和函式MySql儲存過程函式
- mysql儲存過程的引數MySql儲存過程
- MySql資料庫——儲存過程MySql資料庫儲存過程
- MySQL儲存過程和函式MySql儲存過程函式
- MySQL儲存過程 (即函式)MySql儲存過程函式
- MySQL儲存過程裡動態SQL的使用UXMySql儲存過程UX
- mysql和orcale的儲存過程和儲存函式MySql儲存過程儲存函式
- mysql 儲存過程 procedure 批次建表MySql儲存過程
- Mysql 5.7儲存過程的學習MySql儲存過程
- MySQL--儲存過程與檢視MySql儲存過程
- MySQL儲存過程語句及呼叫MySql儲存過程
- MySQL入門--儲存過程(PROCEDURE)和儲存函式(FUNCTION)MySql儲存過程儲存函式Function
- mysql中使用儲存過程生成1億條資料MySql儲存過程
- 理解索引(中):MySQL查詢過程和高階查詢索引MySql
- 查詢當前資料庫存在某個字串的儲存過程資料庫字串儲存過程
- MySQL子查詢MySql
- MYsql 子查詢MySql
- MySQL入門系列:儲存程式(三)之儲存過程簡介MySql儲存過程
- MySQL的寫入資料儲存過程MySql儲存過程
- mysql檢視儲存過程show procedure status;MySql儲存過程
- MySQL 儲存過程進行切換表MySql儲存過程