2015-12-22 4 views
6

Ich brauche MySQL-Tabelle mit Standardwert auf Spalte CURRENT_DATE()Wie erstelle ich mysql-Tabelle mit spalte timestamp default current_date?

Ich versuche

DROP TABLE IF EXISTS `visitors`; 
CREATE TABLE `visitors` (
    `id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT, 
    `ip` VARCHAR(32) NOT NULL, 
    `browser` VARCHAR(500) NOT NULL, 
    `version` VARCHAR(500) NOT NULL, 
    `platform` ENUM('w','l','m') NOT NULL, 
    `date` TIMESTAMP NOT NULL DEFAULT CURRENT_DATE(), 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `person` (`ip`,`date`) 
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; 

aber es ist writting einen Fehler

Query: CREATE TABLE `visitors` (`id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT, `ip` VARCHAR(32) NOT NULL, `browser` VARCHAR(500) NO... 

Error Code: 1064 
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CURRENT_DATE() NOT NULL, 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `person` (`ip`,`date`) 
) ENGINE=INNODB AUTO_INCREMENT=1' at line 7 

Execution Time : 0 sec 
Transfer Time : 0 sec 
Total Time  : 0.063 sec 

was ist das Problem zu schaffen?

Ich brauche nur zu uniques datieren nicht mit Vollzeit-Info ...

können Sie mir helfen?

+0

Dies ist das Standardverhalten einer 'TIMESTAMP' Spalte. Sie müssen in diesem Fall eigentlich nicht 'DEFAULT' angeben. – eggyal

+0

TIMESTAMP und DATE haben nicht das gleiche Format, Timestamp ist eine Zahl und das Datum ist ein formatiertes Datum. Wählen Sie das eine oder das andere. – Anton

+0

Warum versuchst du nicht "date" DATE NOT NULL DEFAULT CURRENT_DATE() 'wenn du nur Jahr, Monat und Tag brauchst. –

Antwort

14

Verwenden CURRENT_TIMESTAMP Funktion statt CURRENT_DATE() Funktion

Try this:

DROP TABLE IF EXISTS `visitors`; 
CREATE TABLE `visitors` (
    `id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT, 
    `ip` VARCHAR(32) NOT NULL, 
    `browser` VARCHAR(500) NOT NULL, 
    `version` VARCHAR(500) NOT NULL, 
    `platform` ENUM('w','l','m') NOT NULL, 
    `date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `person` (`ip`,`date`) 
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; 
+0

nein CURRENT_TIMESTAMP setzt Vollzeitinformationen mit Stunden, Minuten und Sekunden. Ich brauche nur Jahr, Monat und Tag –

+0

Eine Option ist, es als Zeitstempel einzurichten, wie gezeigt, aber wenn Sie tatsächlich die Daten abrufen, nur als Datum, das die Stunden, Minuten und Sekunden abgeschnitten wird.'SELECT DATE (' date') 'gibt es in dem gewünschten Format zurück, wobei das gewünschte Verhalten für die Spalte beibehalten wird. – Redbeard011010

+0

Ich verstehe, aber ich muss einzigartige IP mit Jahr, Monat und Datum so, wenn ich es als Timestamp eindeutig nach 2-3 Sekunden wird es wieder neue Zeile einfügen ... Ich brauche einzigartige becouse nach aktualisieren, wenn IP ist existiert heute nicht in der Tabelle schreiben so becouse Ich brauche nur das Datumsformat –

0

Sie müssen nur CURRENT_DATE() ersetzen durch NOW() in Ihrer Anfrage. Ich habe es versucht und es sieht gut aus.

+0

NOW() wird als 'CURRENT_TIMESTMAP' in mysql berücksichtigt werden –

0

Dies kann ein wenig spät sein, aber ich denke, es könnte für jemand anderen hilfreich sein.

Mein Ansatz war, getdate() wie folgt zu verwenden:

[Timestamp] [Datetime] NOT NULL [DF_myTable_TimeStamp] STANDARD (getdate()).

Wobei [Zeitstempel] die fragliche Spalte ist.

Das Ergebnis ist zum Beispiel: 2017.11.02 11: 58: 34,203

Um dies zu trimmen, verwende ich die folgende

declare @mydate Datumzeit

set @ MyDate = '2017.11.02 11: 58: 34,203'

SELECT try_convert (nvarchar (20), @mydate, 120)

Das Endergebnis ist: 2017-11-02 11:58:34

You can actually set this in MSSQL Management Studio