Mysql
 sql >> Database >  >> RDS >> Mysql

MySQL cortocircuita la funzione IF()?

La risposta è SÌ.
L'IF(cond,expr_true,expr_false) all'interno di una query MySQL è in cortocircuito.

Ecco un test, usando @variables per dimostrare il fatto:

SET @var:=5;  
SELECT IF(1 = 0, (@var:[email protected] + 1), @var ); -- using ':=' operator to modify 'true' expr @var 
SELECT IF(1 = 1, @var, (@var:[email protected] + 1) ); -- using ':=' operator to modify 'false' expr @var 
SELECT @var;

Il risultato è "5" da tutte e tre le query SELECT.

Se la funzione IF() NON fosse in cortocircuito, il risultato sarebbe un '5' da SELECT #1 e '6' da SELECT #2 e un '7' dall'ultimo "select @var".

Questo perché l'espressione "vera" non viene MAI eseguita, nella selezione n. 1 e nemmeno l'espressione falsa viene eseguita per la selezione n. 2.

Si noti che l'operatore ':=' viene utilizzato per modificare un @var, all'interno di una query SQL (clausole select,from e where). Puoi ottenere un SQL davvero fantasioso/complesso da questo. Ho usato @vars per applicare la logica "procedurale" all'interno di una query SQL.

-- J Jorgenson --