Relacionado, leia primeiro para obter o contexto: Procedimento armazenado do MySQL: percorrer a tabela, excluir linhas. Problema lógico: não sai do loop devido à opção LIMIT na consulta
Eu acho que isso é realmente estranho. Não entendo por que a solução desse problema funciona da maneira que funciona, alguém pode explicar a solução, por favor?
Isso é declarado na documentação do mysql:
Se você se referir a uma variável que não foi inicializada, ela terá um valor NULL e um tipo de string.
por que faz diferença se você definir uma variável como NULL antes de usá-la, se esse é o padrão para variáveis não inicializadas?
(Estou ciente de que é uma programação muito suja, não inicializar variáveis, mas ainda quero entender o comportamento.)
Existem duas maneiras de definir uma variável de uma consulta e elas se comportam de maneira diferente, especialmente quando nenhum registro é correspondido.
Você pode
SELECT ... INTO
a variável...Ou você pode
SET
usar o valor retornado por uma subconsulta escalar.Ilustrando a diferença com o banco de dados de amostra ...
Nossa variável começa
NULL
.Nós combinamos uma linha e nossa variável está definida.
Tentamos selecionar um registro que não existe:
Então, o que há em nossa variável agora?
Acho que isso explica a confusão. Quando nenhuma linha é encontrada, a variável permanece inalterada em relação ao seu valor anterior... se você estiver fazendo algo assim
SELECT ... INTO
, não redefinirá o valor se nada for encontrado.Por outro lado, se usarmos a outra construção, a variável será redefinida quando nenhum registro for correspondido.
E isso significa que você não pode obter o comportamento NULL em mais campos, a menos que use
ou existe uma maneira de escrever
? Obrigado Noel