2008-11-06 7 views

Antwort

97

Nein, können Sie nicht.

Allerdings könnte man leicht einen Trigger erstellen, dies zu tun, wie zum Beispiel:

 
CREATE TRIGGER before_insert_app_users 
    BEFORE INSERT ON app_users 
    FOR EACH ROW 
    SET new.api_key = uuid(); 
+1

@See http://stackoverflow.com/questions/6280789/generate-guid-in-mysql-for-existing-data zum Auffüllen von UUIDs in vorhandenen Zeilen. –

+1

Dies ist nicht das Gleiche wie einen DEFAULT-Wert. Wie würde man diese Antwort ändern, um nur den Schlüssel zu setzen, wenn der Wert NULL ist? – ToolmakerSteve

+0

Ich modifizierte es mit MD5 (UUID()) und hat gut funktioniert. War meine Vorgehensweise in Ordnung? –

8

Leider nein, MySQL 5 erfordert Konstanten für den Standard. Das Problem wurde im folgenden Link viel ausführlicher diskutiert. Aber die einzige Antwort ist, null zuzulassen und einen Tabellentrigger hinzuzufügen.

MySQL hat erst kürzlich UUID als Teil ihres DB-Pakets akzeptiert, und es ist nicht so funktionsreich, wie wir es gerne hätten.

http://www.phpbuilder.com/board/showthread.php?t=10349169

+0

Ich sollte hinzufügen, dass die Zulassung NULL und die Verwendung von Triggern kann funktionieren, aber die meisten Entwickler würden es als eine sehr hacky Lösung betrachten. Ich würde es nicht persönlich empfehlen, aber jeder für sich. – TravisO

5

Ich glaube you can't:

der Standardwert muss eine Konstante sein; es kann keine Funktion oder ein Ausdruck sein

+0

Nicht wahr, Sie können getdate() verwenden –

+5

@amrosama - Nein, können Sie nicht. '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. –

+0

CURRENT_TIMESTAMP ist die einzige "Funktion", die als Standardwert verwendet werden kann. Alles andere muss (leider) konstant sein. –

16

Wie bereits erwähnt, können Sie nicht.

Wenn Sie dieses Verhalten simulieren möchten Sie einen Trigger auf diese Weise verwenden können:

CREATE TRIGGER before_insert_app_users 
BEFORE INSERT ON app_users 
FOR EACH ROW 
    IF new.uuid IS NULL 
    THEN 
    SET new.uuid = uuid(); 
    END IF; 

Sie haben noch vorher vorhandenen Zeilen zu aktualisieren, wie folgt aus:

UPDATE app_users SET uuid = (SELECT uuid()); 
+0

Ich bekomme einen Syntaxfehler mit diesem Code. Es scheint, dass der Aufruf von uuid() innerhalb des FOR EACH ROW-Blocks nicht erlaubt ist. Irgendwelche Vorschläge? –

+1

Welche Version von MySQL verwenden Sie? Ich habe diese Syntax für 5.5 versucht und es funktioniert. Alternativ versuchen Sie, 'uuid()' durch '(SELECT uuid())' zu ersetzen – Pamput

Verwandte Themen