Ich möchte so etwas machen:
create table app_users
(
app_user_id smallint(6) not null auto_increment primary key,
api_key char(36) not null default uuid()
);
Dies führt jedoch zu einem Fehler. Gibt es eine Möglichkeit, eine Funktion für einen Standardwert in MySQL aufzurufen?
Vielen Dank.
SET new.api_key = COALESCE(new.api_key, uuid())
bestehende Werte zu erhalten.Ab MySQL v8.0.13 ist es möglich, einen Ausdruck als Standardwert für ein Feld zu verwenden:
quelle
Wie schon gesagt, kannst du nicht.
Wenn Sie dieses Verhalten simulieren möchten, können Sie einen Trigger folgendermaßen verwenden:
Sie müssen noch vorhandene Zeilen wie folgt aktualisieren:
quelle
Leider nein, MySQL 5 benötigt standardmäßig Konstanten. Das Problem wurde unter dem folgenden Link ausführlicher erörtert. Die einzige Antwort ist jedoch, null zuzulassen und einen Tabellenauslöser hinzuzufügen.
MySQL hat UUID erst kürzlich als Teil seines DB-Pakets akzeptiert und es ist nicht so funktionsreich, wie wir es gerne hätten.
http://www.phpbuilder.com/board/showthread.php?t=10349169
quelle
Ich glaube du kannst nicht :
quelle
getdate()
ist nicht einmal eine MySQL-Funktion. Der Link in der Antwort erklärt die einzige Ausnahme: «Sie können CURRENT_TIMESTAMP als Standard für eine TIMESTAMP-Spalte angeben» .Beachten Sie, dass die
UUID()
Rückgabe von MySQLCHAR(36)
und das Speichern von UUIDs als Text (wie in den anderen Antworten gezeigt) offensichtlich ineffizient ist. Stattdessen sollte die Spalte seinBINARY(16)
, und Sie können sieUUID_TO_BIN()
beim Einfügen von Daten undBIN_TO_UUID()
beim Zurücklesen verwenden.Da MySQL nicht wirklich weiß, dass es sich um eine UUID handelt, kann es schwierig sein, Probleme mit der als Binärdatei gespeicherten UUID zu beheben. In diesem Artikel wird erläutert, wie Sie eine generierte Spalte erstellen, die die UUID nach Bedarf in Text konvertiert, ohne Speicherplatz zu beanspruchen oder separate Binär- und Textversionen synchron zu halten: https://mysqlserverteam.com/storing-uuid-values-in -mysql-tables /
quelle
Ich bin nicht sicher, ob die obigen Antworten für eine ältere Version gelten, aber ich habe irgendwo gesehen, dass Sie dies mit der Funktion unhex () tun können. Ich habe es versucht und es funktioniert. (Maria DB Version 10.2)
Du kannst tun
und es funktioniert. Um die UUID zu sehen, machen Sie einfach hex (Spaltenname).
quelle
In MariaDB ab Version 10.2.1 können Sie. Siehe die Dokumentation .
quelle