MySQL CURRENT_TIMESTAMP Feld-updates bei jedem update
Der beste Weg, um zu erklären, dieses problem wird mit einem Beispiel.
Ich habe eine Tabelle:
CREATE TABLE `example` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`data` varchar(255) DEFAULT NULL,
`created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`updated` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8
Ergebnis:
- id | Daten | erstellt | aktualisiert (NULL)| (NULL) | (NULL) | (NULL)
Dann habe ich einige Daten eingefügt werden:
INSERT INTO example (
`data`
) VALUES (
'abc123'
)
Ergebnis:
- id | Daten | erstellt | aktualisiert 1 | abc123 | 2013-01-16 13:12:16 | (NULL)
Und dann update ich
UPDATE example SET
`data` = 'def456',
`updated` = NOW()
WHERE id = 1
Ergebnis:
- id | Daten | erstellt | aktualisiert 1 | def456| 2013-01-16 13:16:24 | 2013-01-16 13:14:26
Das problem: Beachten Sie, wie die created
Feld auch aktualisiert und hat eine etwas andere Zeit, um richtig gespeichert aktualisiert-Feld. Ich habe diese Beispiel-Tabelle-und andere, die in ähnlicher Weise auf der gleichen Datenbank ohne dieses problem, also ich bin vollkommen verwirrt durch es.
Nur um zu klären, beachten Sie, wie die
created
Feld AUCH aktualisiert. Dieser funktioniert nicht wie dokumentiert.InformationsquelleAutor Akahadaka | 2013-01-16
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
updated
werden muss:TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
Damit Ihre
CREATE TABLE
wäre:Dies bedeutet, dass wenn Sie führen Sie Ihre
UPDATE
in der Zukunft, werden Sie nicht brauchen, um passieren eine update-variable, weil MySQL automatisch aktualisieren für Sie 🙂CURRENT_TIMESTAMP
. Aber mit diesem wissen, ist es, als wenn meincreated
Feld wurde mitNOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
. Gibt es eine Möglichkeit zu überprüfen/ändern Sie diese ohne das erstellen der Tabelle wieder?Welche version von MySQL verwendest du? Zitieren eine Zeile aus dem link in eggyal die Antwort von Automatische Initialisierung und Aktualisierung der für TIMESTAMP : "Es ist nicht möglich, den aktuellen timestamp der default Wert für eine Spalte und die auto-update-Wert für eine andere Spalte"
Yep, die Sie tun können:
ALTER TABLE example CHANGE updated updated TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
.. müssen SieALTER TABLE
undCHANGE
🙂Auch möchten Sie vielleicht einen Blick auf die STANDARD-Ausgabe @Akahadaka gepostet oben, wenn es dich betrifft. Vielleicht mit einer von Ihnen STANDARDMÄßIG etwas anderes, und manuell einfügen es das erste mal (ich würde sagen
CREATED
).Haben Sie das gelöst?
InformationsquelleAutor Jimbo
Dies ist wahrscheinlich, wie die problem-Tabelle Tabelle wurde versehentlich erstellt:
Vielleicht jemand benutzt 3rd-party-software, um es zu schaffen?
Einer
ON UPDATE CURRENT_TIMESTAMP
wird zu zerstören, das Datum erstellen. So das problem lösen verwendenALTER TABLE
etwa so:Dies wird loszuwerden, die unerwünschte überschreiben der
created
Feld bei jedem update.InformationsquelleAutor Akahadaka