Het antwoord is JA.
De IF(cond,expr_true,expr_false) binnen een mysql-query is kortgesloten.
Hier een test, met @variables om het feit te bewijzen:
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;
Het resultaat is '5' van alle drie de SELECT-query's.
Als de IF()-functie NIET was kortgesloten, zou het resultaat een '5' zijn van SELECT #1, en '6' van SELECT #2, en een '7' van de laatste 'select @var'.
Dit komt omdat de 'true'-expressie NOOIT wordt uitgevoerd, in select #1 en evenmin wordt de false-expressie uitgevoerd voor select #2.
Merk op dat de operator ':=' wordt gebruikt om een @var te wijzigen, binnen een SQL-query (select, from, en where-clausules). Je kunt hier een hele mooie / complexe SQL van krijgen. Ik heb @vars gebruikt om 'procedurele' logica toe te passen binnen een SQL-query.
-- J Jorgenson --