Mi sono confuso con un concetto apparentemente semplice. Mysql definisce funzione deterministica come una funzione cheFunzione deterministica in mysql
produce sempre lo stesso risultato parametri lo stesso ingresso
Così nella mia comprensione, funzioni come
CREATE FUNCTION foo (val INT) READS SQL DATA
BEGIN
DECLARE retval INT;
SET retval = (SELECT COUNT(*) FROM table_1 WHERE field_1 = val);
RETURN retval;
END;
non sono deterministico (c'è nessuna garanzia che cancellazione/aggiornamento/inserimento non avvenga tra 2 chiamate alla funzione). Allo stesso tempo, ho visto molte funzioni che funzionano più o meno allo stesso modo, ovvero restituiscono il valore in base al risultato di query e dichiarato come DETERMINISTIC
. Sembra che mi manchi qualcosa di molto semplice.
Qualcuno potrebbe chiarire questo problema?
Grazie.
Aggiornamento Grazie per coloro che hanno risposto (+1); finora sembra che ci sia un diffuso abuso della parola chiave DETERMINISTIC
. È ancora difficile credere per me che così tante persone lo facciano, quindi aspetterò un po 'per altre risposte.
Puoi esporre un esempio delle "molte funzioni" di cui stai parlando? – Mat
@Mat: ad esempio, http://dev.mysql.com/doc/refman/5.0/en/create-procedure.html (nella sezione commenti utente, cerca "CREATE FUNCTION db.fnfullname" - legge la riga da db per un ID passato e restituisce il valore in base al risultato di select). – a1ex07
"... commenti utente ..." ... Qualche funzione mysql reale che hai in mente? – Mat