JavaScript statt SQL: MySQL 9.0 lässt neue Sprachen zu

Version 9.0 von MySQL kommt mit größeren Neuerungen: Das Innovation Release bietet JavaScript-Funktionen für SQL und einen Vektor-Typ für KI-Freunde.

In Pocket speichern vorlesen Druckansicht 46 Kommentare lesen
Aufmacher

(Bild: iX)

Lesezeit: 2 Min.

Von der zu Oracle gehörenden Datenbank MySQL sind neue Versionen erschienen: 9.0.0 (Innovation Release), 8.4.1 (Long Term Support) und 8.0.38 (Long Term Support). Während die Long-Term-Support-Varianten auf Stabilität ausgelegt sind, bieten Innovation Releases neue Funktionen, bei der 9.0 sind das insbesondere Stored JavaScript und der Vector-Typ.

Das neue Stored JavaScript gibt es nur in der Enterprise Edition und es basiert auf der Multilingual Engine (MLE), die die Datenbank für andere Sprachen jenseits von SQL öffnet. Zugelassen ist ECMAScript 2023 in strikter Form mit allen gängigen Objekten wie Object, Function, Math, Date, String und auch JSON, nicht jedoch der neue Vektortyp. Vorgesehen sind ferner Konsoleausgaben via console.log() und console.error(). Strings müssen im utf8mb4-Format vorliegen. Ein Beispiel für ein Stored JavaScript:

mysql> CREATE FUNCTION gcd(a INT, b INT) 
RETURNS INT 
NO SQL 
LANGUAGE JAVASCRIPT AS
  $mle$
    let x = Math.abs(a)
    let y = Math.abs(b)
    while(y) {
      var t = y
      y = x % y
      x = t
    }
    return x
  $mle$
;

Bei Entwicklerinnen und Entwicklern sind Vektordatenbanken insbesondere für KI-Modelle beliebt. Das können Developer nun mit dem Spalten-Typ VECTOR auch in MySQL abbilden, der eine Liste von 4 Byte Floating-Point Werten enthält. Er kann als String entweder binär oder in Listenform ausgedrückt sein. Ein Beispiel:

mysql> CREATE TABLE v1 (c1 VECTOR(5000));
Query OK, 0 rows affected (0.03 sec)

Neue Funktionen für die Arbeit mit Vektoren sind insbesondere STRING_TO_VECTOR() und VECTOR_TO_STRING():

mysql> SELECT STRING_TO_VECTOR('[2, 3, 5, 7]');
+------------------------------------------------------+
| TO_VECTOR('[2, 3, 5, 7]')                            |
+------------------------------------------------------+
| 0x00000040000040400000A0400000E040                   |
+------------------------------------------------------+
1 row in set (0.00 sec)

mysql> SELECT VECTOR_TO_STRING(0x00000040000040400000A0400000E040);
+------------------------------------------------------+
| VECTOR_TO_STRING(0x00000040000040400000A0400000E040) |
+------------------------------------------------------+
| [2.00000e+00,3.00000e+00,5.00000e+00,7.00000e+00]    |
+------------------------------------------------------+
1 row in set (0.00 sec)

Der Vector-Typ hat allerdings eine Reihe von Einschränkungen: Er kann bestimmte Schlüssel nicht annehmen, unter anderem den Primary. Bestimmte Funktionen sind nicht erlaubt: numerische, Volltextsuch-, XML- und JSON-Funktionen. Begrenzt sind auch String- und Verschlüsselungsfunktionen. Und er kann nicht mit anderen Typen verglichen werden.

Weitere kleinere Änderungen von Version 9.0 sind, dass EXPLAIN ANALYZE INTO nun JSON als Format akzeptiert oder Erweiterungen von Prepared Statements. Einiges ist auch veraltet (deprecated) und sollte nicht mehr verwendet werden, zum Beispiel die MIN_VALUE- und MAX_VALUE-Spalten der variables_info-Tabelle. Komplett entfernt hat Oracle das mysql_native_password-Plug-in.

Weitere Infos zu Version 9.0 finden sich in der Dokumentation und zu den anderen neuen Versionen im Blog.

(who)