webentwicklung-frage-antwort-db.com.de

MySQL CURRENT_TIMESTAMP beim Erstellen und beim Aktualisieren

Ich möchte eine Tabelle definieren, die 2 TIMESTAMP-Felder enthält, etwa so:

CREATE TABLE `msgs` (
    `id` INT PRIMARY KEY AUTO_INCREMENT,
    `msg` VARCHAR(256),
    `ts_create` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    `ts_update` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
)

So vermeiden Sie Fehler:

ERROR 1293 (HY000): Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause

Es geht darum, das gewünschte Verhalten von ts_create und ts_update im Tabellenschema.

63
kuba

Dies ist eine Einschränkung von mySQL. Sie können nicht haben zwei TIMESTAMP-Spalten mit Standardwerten, die auf CURRENT_TIMESTAMP verweisen. Die einzige Möglichkeit wäre, einen DATETIME-Typ für ts_create zu verwenden, der leider keinen Standardwert von NOW () haben kann. Sie können jedoch Ihren eigenen Auslöser betätigen, um dies zu erreichen.

55
Clement P

Schätze, das ist ein alter Beitrag, aber ich denke, dass MySQL 2 TIMESTAMP in seinen letzten Ausgaben unterstützt. MySQL 5.6.25 ist das, was ich derzeit verwende.

14
avinash v p

Sie verwenden eine ältere MySql-Version. Aktualisieren Sie Ihre MySQL auf 5.6.5+, es wird funktionieren.

5

ich denke, es ist möglich, indem man die folgende Technik anwendet

`ts_create` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`ts_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
2
iKing

Sie können nicht zwei TIMESTAMP-Spalten mit demselben Standardwert von CURRENT_TIMESTAMP in Ihrer Tabelle haben. Bitte beziehen Sie sich auf diesen Link: http://www.mysqltutorial.org/mysql-timestamp.aspx

1
clemquinones

sie können dies versuchen ts_create TIMESTAMP DEFAULT CURRENT_TIMESTAMP, ts_update TIMESTAMP DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP

0
AJavaLover

Ich denke du willst vielleicht ts_create als datetime (also umbenennen -> dt_create) und nur ts_update als timestamp? Dies stellt sicher, dass es einmal eingestellt unverändert bleibt.

Ich verstehe, dass datetime für manuell gesteuerte Werte ist, und Timestamp ist insofern etwas "Besonderes", als MySQL es für Sie verwaltet. In diesem Fall ist datetime daher eine gute Wahl für ts_create.

0
Brian

Ich würde sagen, dass Sie das DEFAULT CURRENT_TIMESTAMP nicht auf Ihrem ts_update haben müssen: Wenn es leer ist, wird es nicht aktualisiert, also ist Ihr 'letztes Update' das ts_create.

0
Nanne

Dies ist die winzige Einschränkung von Mysql in älteren Versionen, tatsächlich funktionieren nach Version 5.6 und höher mehrere Zeitstempel ...

0