Mysql
 sql >> Base de données >  >> RDS >> Mysql

MySQL court-circuite-t-il la fonction IF() ?

La réponse est OUI.
Le IF(cond,expr_true,expr_false) dans une requête mysql est court-circuité.

Voici un test, utilisant des @variables pour prouver le fait :

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;

Le résultat est '5' pour les trois requêtes SELECT.

Si la fonction IF() n'était PAS court-circuitée, le résultat serait un '5' de SELECT #1, et '6' de SELECT #2, et un '7' de la dernière "select @var".

C'est parce que l'expression 'true' n'est JAMAIS exécutée, dans la sélection #1 et que la fausse expression n'est pas non plus exécutée pour la sélection #2.

Notez que l'opérateur ':=' est utilisé pour modifier une @var, dans une requête SQL (clauses select, from et where). Vous pouvez obtenir du SQL vraiment sophistiqué/complexe à partir de cela. J'ai utilisé @vars pour appliquer une logique "procédurale" dans une requête SQL.

--J Jorgenson --