Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

O MySQL faz um curto-circuito na função IF ()?


A resposta é SIM.
O IF(cond,expr_true,expr_false) dentro de uma consulta mysql está em curto-circuito.

Aqui um teste, usando @variables para provar o fato:
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;

O resultado é '5' de todas as três consultas SELECT.

Se a função IF() NÃO estivesse em curto-circuito, o resultado seria um '5' do SELECT #1, e '6' do SELECT #2, e um '7' do último "select @var".

Isso ocorre porque a expressão 'true' NUNCA é executada, no select #1 e nem a expressão false é executada no select #2.

Observe que o operador ':=' é usado para modificar um @var, dentro de uma consulta SQL (cláusulas select,from e where). Você pode obter um SQL realmente sofisticado/complexo com isso. Eu usei @vars para aplicar lógica 'procedural' em uma consulta SQL.

-- J Jorgenson --