Deterministische Funktion in MySQL

Hab ich verwechselt mit einem scheinbar einfachen Konzept. Mysql definiert deterministische Funktion als eine Funktion, die

ergibt immer das gleiche Ergebnis für die gleichen Eingabeparameter

So, in meinem Verständnis, die Funktionen wie

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;

sind nicht deterministisch (es gibt keine Garantie, dass die delete/update/insert nicht zufällig zwischen 2 Funktionsaufrufen). Zur gleichen Zeit, sah ich viele Funktionen, die machen so ziemlich das gleiche, d.h. return-Wert basiert auf dem Ergebnis von Abfragen, und erklärte, wie DETERMINISTIC. Es sieht aus wie ich bin fehlt etwas sehr Grundsätzliches.

Kann jemand diese Frage klären?

Dank.

Update
Vielen Dank für diejenigen, die Antwort auf(+1); so weit es sieht aus wie es ist eine weit verbreitete Missbrauch von DETERMINISTIC Schlüsselwort. Es ist immer noch schwer zu glauben für mich, dass so viele Menschen es tun, also werde ich noch ein bisschen warten für die anderen Antworten.

Kommentar zu dem Problem
Könnten Sie ein Beispiel für die "vielen Funktionen" redest du? Kommentarautor: Mat
@Mat: Zum Beispiel, dev.mysql.com/doc/refman/5.0/en/create-procedure.html (in den user-Kommentaren Abschnitt, suchen Sie nach "ERSTELLEN-FUNKTION db.fnfullname" - es liest Zeile aus der db eine id übergeben und liefert den Wert basierend auf dem Ergebnis der Auswahl). Kommentarautor: a1ex07
"... user-Kommentare ..." ... Einige echte mysql-Funktion, die Sie im Sinn haben? Kommentarautor: Mat
Ich mag diese Frage. Ich sehe nicht, wo in der MySQL-docs ist angegeben, dass eine Funktion nicht DETERMINISTISCH und READS SQL DATA zur gleichen Zeit (und was würde das bedeuten für die Funktion). Kommentarautor: ypercubeᵀᴹ
@Mat: ich Stimme mit Ihnen überein, dass "user-Kommentare" - Abschnitt ist nicht sehr zuverlässige Quelle. Mein Erster Gedanke war, dass ich nicht zu ernst nehmen. Also googelte ich vor der Frage und fand viele ähnliche Implementierungen (ein weiteres Beispiel, databasejournal.com/features/mysql/article.php/3569846/... , "Zugriff auf Tabellen in stored functions"). Dann erkannte ich, dass es entweder ein allgemeiner Fehler oder bin ich etwas fehlt offensichtlich... Kommentarautor: a1ex07

InformationsquelleAutor der Frage a1ex07 | 2011-10-30

Schreibe einen Kommentar