2016-07-28 10 views
0

Ich möchte eine Tabelle erstellen, in der OPENDATE Feld ist. Der Standardwert, für den das Systemdatum 30 Tage früher sein sollte.Meine SQL ADDDATE FUNKTION funktioniert nicht in CREATE TABLE

CREATE TABLE bugs (
    ID INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    TITLE VARCHAR(20) NOT NULL, 
    SEVERITY INT NOT NULL check(SEVERITY>0 && SEVIRITY<5), 
    OPENDATE DATETIME NOT NULL DEFAULT ADDDATE(CURRENT_TIMESTAMP,-30), 
    CLOSEDATE DATETIME DEFAULT NULL 
) ENGINE=MyISAM DEFAULT CHARSET=latin1; 

  1. Dies gibt bei Funktionsfehler. Kann ich Funktionen zum Zeitpunkt der Tabellenerstellung nicht verwenden? Wenn nein, was ist die Lösung und wenn ja, warum funktioniert das nicht?

  2. Ich habe auch festgestellt, dass der Bezeichner CURRENT_DATE nicht erkannt wird. Warum?

Antwort

0

Dies ist nicht möglich! Siehe die folgende Erklärung der offiziellen MySQL-Dokumentation:

Die DEFAULT value-Klausel in einer Datentypspezifikation gibt einen Standardwert für eine Spalte an. Mit einer Ausnahme muss der Standardwert eine Konstante sein; es kann keine Funktion oder ein Ausdruck sein. Dies bedeutet beispielsweise, dass Sie den Standardwert für eine Datumsspalte nicht als Wert für eine Funktion wie NOW() oder CURRENT_DATE festlegen können. Eine Ausnahme ist, dass Sie CURRENT_TIMESTAMP als Standard für die Spalten TIMESTAMP und angeben können.

http://dev.mysql.com/doc/refman/5.7/en/data-type-defaults.html

Sie haben den Standardwert der Spalte auf Software-Seite zu steuern. Nach dem Erstellen und Initialisieren der Tabelle mit einigen Daten können Sie die Spalte mit solchen Daten UPDATE.

+0

@ sebastianbrosch- Soll die Linie geändert werden?OPENDATE Datum NOT NULL DEFAULT CURRENT_DATE – Prakash

+0

@ sebastianbrosch- Entschuldigung, modifiziert als Datatype als DATATIME und Bezeichner wie CURRENT_TIMESTAMP und habe das funktioniert. – Prakash

1

Kann ich Funktionen zum Zeitpunkt der Tabellenerstellung nicht verwenden?

Das stimmt. Sie können Funktionen in Tabellendefinitionen nicht verwenden.

Sie können eine Spalte in einer Tabelle wie folgt definieren:

insertdate TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 

MySQL erkennt nur CURRENT_TIMESTAMP in diesem Zusammenhang nicht CURRENT_DATE oder ein anderes Symbol oder eine Funktion.

Dann können Sie in einer Abfrage so etwas tun.

SELECT ... insertdate - INTERVAL 30 DAY opendate 

Oder könnten Sie sogar eine opendate Spalte wie folgt definieren:

opendate TIMESTAMP DEFAULT NULL 

dann eine Abfrage Muster wie folgt verwenden:

SELECT ... WHEN opendate IS NULL 
       THEN insertdate - INTERVAL 30 DAY 
       ELSE opendate END opendate 

Das Ihre opendate Spalte, wenn Sie geben zurück setze es, sonst den berechneten Öffnungswert. Aber Sie müssen Ihre Geschäftsregeln darum sorgfältig erarbeiten.

+0

Wenn ich die Zeile ändern als ... OPENATE DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, - dies funktioniert, wo die Zeile ... OPENDATE DATUM NOT NULL STANDARD CURRENT_DATE - nicht funktioniert. nach http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html CURRENT_DATE Kennung sollte gültig sein ... – Prakash

Verwandte Themen