Heim  >  Artikel  >  Datenbank  >  Wie verwalte ich mehrere TIMESTAMP-Spalten mit CURRENT_TIMESTAMP in MySQL?

Wie verwalte ich mehrere TIMESTAMP-Spalten mit CURRENT_TIMESTAMP in MySQL?

Susan Sarandon
Susan SarandonOriginal
2024-11-01 02:53:28761Durchsuche

How to Manage Multiple TIMESTAMP Columns with CURRENT_TIMESTAMP in MySQL?

Verwalten mehrerer TIMESTAMP-Spalten mit CURRENT_TIMESTAMP

In MySQL kann die Definition mehrerer TIMESTAMP-Spalten mit CURRENT_TIMESTAMP-Standardwerten zum Fehler „Falsche Tabellendefinition“ führen ; es kann nur eine TIMESTAMP-Spalte mit CURRENT_TIMESTAMP in der DEFAULT- oder ON UPDATE-Klausel geben.“ Um diese Einschränkung zu überwinden, ziehen Sie den folgenden Ansatz in neueren MySQL-Editionen (z. B. 5.6.25) in Betracht:

Lösung:

Ändern Sie die Tabellendefinition wie folgt:

<code class="sql">CREATE TABLE `msgs` (
    `id` INT PRIMARY KEY AUTO_INCREMENT,
    `msg` VARCHAR(256),
    `ts_create` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    `ts_update` TIMESTAMP NOT NULL,
    CONSTRAINT UPDATE_ON_CHANGE_ts_update
        FOREIGN KEY (`ts_update`) REFERENCES `msgs` (`ts_create`)
        ON DELETE SET NULL
        ON UPDATE CURRENT_TIMESTAMP
)</code>

In diesem geänderten Schema:

  • ts_create bleibt als reguläre TIMESTAMP-Spalte mit einem CURRENT_TIMESTAMP-Standardwert.
  • ts_update ist als TIMESTAMP-Spalte mit der NOT NULL-Einschränkung definiert .
  • Zwischen ts_update und ts_create wird eine Fremdschlüsseleinschränkung erstellt, die kaskadierende Aktualisierungen von ts_create zu ts_update ermöglicht.
  • Die Aktion ON UPDATE CURRENT_TIMESTAMP wird über die Fremdschlüsseleinschränkung auf ts_update angewendet, um sicherzustellen dass die ts_update-Spalte bei jeder Änderung von ts_create auf den aktuellen Zeitstempel aktualisiert wird.

Mit diesem Ansatz können Sie das gewünschte Verhalten beibehalten und sowohl die Datensatzerstellung als auch die Aktualisierungszeitstempel verfolgen und gleichzeitig den MySQL-Fehler vermeiden.

Das obige ist der detaillierte Inhalt vonWie verwalte ich mehrere TIMESTAMP-Spalten mit CURRENT_TIMESTAMP in MySQL?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn