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

MySQL :Si j'utilise une fonction dans une requête SQL plus d'une fois, sera-t-elle recalculée à chaque fois ?

Voici une courte expérience pour voir ce qui se passe.

create function determin_rand (i integer) 
returns float DETERMINISTIC
return rand();

create function not_determin_rand (i integer) 
returns float 
return rand();

select determin_rand(1) as d1 , determin_rand(1) as d2, 
  not_determin_rand(1) as nd1, not_determin_rand(1) as nd2

0.00850549154   0.831901073456  0.133989050984  0.174242004752

Comme les valeurs sont différentes, la fonction est appelée à chaque fois. Dans la première fonction, je l'ai déclaré déterministe, mais cela n'a pas fait de différence.

J'ai créé un sqlfiddle pour que vous puissiez l'essayer avec différentes versions de mysql.

http://sqlfiddle.com/#!2/a8536/2