2017-04-07 4 views
0
CREATE TABLE `williamhill` (
    `id` VARCHAR(50) NULL, 
    `nick` VARCHAR(50) NULL, 
    `password` VARCHAR(50) NULL DEFAULT (SELECT default_password FROM person p WHERE p.id = id), 
    `Colonna 4` VARCHAR(50) NULL 
) 
COLLATE='latin1_swedish_ci' 
ENGINE=InnoDB 

Wie kann ich so etwas in MYSQL machen? Ich versuche, einen Standardwert aus einer anderen Tabelle zuzuweisen, wenn beim Erstellen einer neuen Zeile kein Wert angegeben wurde.Tabelle erstellen und einem Feld eine Abfrage als Standardwert zuweisen

Ist es möglich, oder sollte ich einen Trigger/Prozedur verwenden?

+1

Nein. Das kannst du nicht tun. Sie müssen einen Trigger verwenden, um einen solchen Standardwert festzulegen. –

Antwort

1

MySQL ist ziemlich eindeutig, dass dies nicht möglich ist. Zunächst wird die Standard-Syntax als Standard Wert bezeichnet. Ein Wert wird erwartet.

Hier ist, wie die documentation dies beschreibt:

Die DEFAULT Wert-Klausel in einer Datentyp-Spezifikation gibt einen Standardwert für eine Spalte. Mit einer Ausnahme muss der Standardwert eine Konstante sein; es kann keine Funktion oder ein Ausdruck sein.

(Die einzige Ausnahme ist CURRENT_TIME die wahrscheinlich die meisten Menschen gar nicht bewusst, eine Funktion ist.)

Viele Datenbanken Funktion erlauben nennt hier. Keine - soweit ich weiß - erlauben Abfrageausdrücke. Dies kann jedoch oft in einer benutzerdefinierten Funktion emuliert werden.

Die Umgehung besteht darin, einen Trigger zu verwenden. Ein Wert in einer anderen Tabelle nachzuschlagen ist eine ziemlich häufige Verwendung von Triggern.

Verwandte Themen