sql >> Database >  >> RDS >> Mysql

Heeft MySQL Short Circuit de IF() functie?

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 --



  1. Mysql:selecteer rijen uit een tabel die niet in een andere staan

  2. ODP.NET implementeren en configureren om te werken zonder installatie met Entity Framework

  3. Wat is de locatie van mysql-client .my.cnf in XAMPP voor Windows?

  4. Automatische gegevensversie in MariaDB Server 10.3