2010-06-09 3 views
6

Ich muss das Datum und die Uhrzeit verfolgen, die ein Benutzer in meiner MySQL-Datenbank erstellt wurde. Ich habe Spalte namens "erstellt" und den Datentyp als TIMESTAMP.php mysql timestamp

Das Problem ist, dass der TIMESTAMP-Wert sich ändert, wenn ein Benutzer sein Kennwort oder andere Informationen ändert. Wie kann ich das einstellen, um nicht zu ändern ????

Antwort

5

Sie können einfach nur die Standardklausel CURRENT_TIMESTAMP setzen (wie @Mark und @dcp bemerkt in den anderen Antworten):

CREATE TABLE your_table (
    ... 
    `created_timestamp` TIMESTAMP DEFAULT CURRENT_TIMESTAMP 
); 

Testfall:

CREATE TABLE tb (`a` int, `c` TIMESTAMP DEFAULT CURRENT_TIMESTAMP); 
Query OK, 0 rows affected (0.04 sec) 

INSERT INTO tb (a) VALUES (1); 
Query OK, 1 row affected (0.01 sec) 

SELECT * FROM tb; 
+------+---------------------+ 
| a | c     | 
+------+---------------------+ 
| 1 | 2010-06-09 23:31:16 | 
+------+---------------------+ 
1 row in set (0.00 sec) 

UPDATE tb SET a = 5; 
Query OK, 1 row affected (0.00 sec) 
Rows matched: 1 Changed: 1 Warnings: 0 

SELECT * FROM tb; 
+------+---------------------+ 
| a | c     | 
+------+---------------------+ 
| 5 | 2010-06-09 23:31:16 | 
+------+---------------------+ 
1 row in set (0.00 sec) 

EDIT:

In meiner ursprünglichen Antwort schlug ich vor, eine -Spalte mit einer DEFAULT-Klausel zu verwenden, die auf CURRENT_TIMESTAMP gesetzt ist. Dies ist jedoch nur möglich, wenn der TIMESTAMP Datentyp, wie stated in documentation:

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. 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. Die Ausnahme ist, dass Sie CURRENT_TIMESTAMP als Standard für eine Spalte TIMESTAMP angeben können.

3

Verwenden Sie eine Datetime-Spalte. Zeitstempel automatische Updates.

+2

Nicht unbedingt, Sie können es nicht automatisch zu -aktualisieren. – dcp

+0

Standardmäßig wird der Zeitstempel NICHT aktualisiert. – ajacian81

0

Machen Sie es zu einer DateTime?

0
  • Belassen Sie das Format so, wie es ist, aber wenn Sie die eingefügte Zeichenfolge mit date() formatieren.
  • Dann müssen updating sein, wenn der Benutzer ihre Informationen ändert.
7

Klingt wie Sie nicht die Timestamp-Spalte richtig eingerichtet haben:

Schauen Sie sich die guide:

* 

    Auto-initialization and auto-update: 

    ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 

* 

    Auto-initialization only: 

    ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP 

* 

    Auto-update only: 

    ts TIMESTAMP DEFAULT 0 ON UPDATE CURRENT_TIMESTAMP 

* 

    Neither: 

    ts TIMESTAMP DEFAULT 0 
+1

+1, schlag mich dazu – Serge

0

Wenn Sie die Tabelle erstellen, sollten Sie das Update auf weglassen

ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 

sollte

ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP 

link

0

unter Attribute deaktivieren "auf Update CURRENT_TIMESTAMP".

3

Ändern Sie es zu DEFAULT CURRENT_TIMESTAMP andernfalls wird es automatisch aktualisiert.Vom manual:

In einer CREATE TABLE-Anweisung kann die erste TIMESTAMP-Spalte in einer der folgenden Weisen deklariert werden:

Mit beiden DEFAULT CURRENT_TIMESTAMP und ON UPDATE CURRENT_TIMESTAMP Klauseln, hat die Spalte den aktuellen Zeitstempel für den Standardwert und wird automatisch aktualisiert.

Mit weder DEFAULT noch ON UPDATE-Klauseln ist es das gleiche wie DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP.

Mit einer DEFAULT CURRENT_TIMESTAMP-Klausel und keiner ON UPDATE-Klausel hat die Spalte den aktuellen Zeitstempel für ihren Standardwert, wird jedoch nicht automatisch aktualisiert.

Schwerpunkt meiner.